[PYTHON] J'ai eu du mal avec le branchement conditionnel dans les modèles de Django.

Chose que tu veux faire

J'essaye de permettre de réserver du matériel pour un certain cercle depuis le Web avec Django Pour vous empêcher de modifier ou de supprimer des données de réservation antérieures Je souhaite masquer les boutons de modification et de suppression des rendez-vous antérieurs à l'heure actuelle.

J'ai eu du mal à essayer de décrire la branche conditionnelle pour cela dans les modèles.

views.py


context = {
    'band_name' : band_name,
    'schedules' : Schedule.objects.all(),
    'target_date' : datetime.datetime.now()
}
return render(request, 'xxx.html', context)

xxx.html


{% schedule in schedules %}
  {% if schedule.target_date > target_date %}
Affichage des boutons
  {% endif %}
{% endfor %}

Passer la variable (date du jour) et le modèle aux modèles Je souhaite contrôler l'affichage / non-affichage des boutons par branchement conditionnel par date dans la boucle des horaires.

Cependant, la branche conditionnelle ne peut pas être bien faite. Simplement {% if True %} Ensuite, la branche conditionnelle a été bien faite, alors jugez à l'avance avec la vue et utilisez l'id du modèle et le résultat du jugement (Bool) comme dictionnaire. Je l'ai passé à des modèles et j'ai essayé de le contrôler

views.py


my_dic = {}
target_date = datetime.datetime.now()
for schedule in schedules:
  if target_date < schedule.target_date:
    my_dic[schedule.id] = True
  else:
    my_dic[schedule.id] = False 
context = {
    'schedules' : Schedule.objects.all(),
    'my_dic' : my_dic,
}
return render(request, 'xxx.html', context)

xxx.html


{% schedule in schedules %}
  {% if my_dic[schedule.target_date] %}
Affichage des boutons
  {% endif %}
{% endfor %}

Mais cela ne fonctionne pas non plus.

Extension du dictionnaire dans des modèles my_dic.id Vous pouvez développer en spécifiant la clé pour id in, mais je veux passer schedule.id dans la boucle des horaires à cette partie ".id". Cela ne fonctionne pas non plus. L'affectation d'une variable à l'aide de la balise with ne fonctionne pas.

{% with target_id = schedule.id %} {% if my_dic[schedule.target_id] %}

Cela ne fonctionne pas non plus.

{% if my_dic.schedule.id %} {% if my_dic[schedule.id] %} Celles-ci n'étaient bien sûr pas bonnes.

Solution

J'ai fait une méthode directement sur le modèle.

models.py


class Schedule(models.Model):
  #Définition de la colonne ...
  target_date = models.DateField(default=timezone.now, verbose_name=«Date de réservation»)

  def is_available(self):
    current_day = timezone.datetime.today()
    return current_day < self.active_date

xxx.html


{% schedule in schedules %}
  {% if schedule.is_available %}
Affichage des boutons
  {% endif %}
{% endfor %}

Done.

Si vous utilisez cette méthode, vous pouvez rediriger même l'accès direct par URL.

Le codage que j'ai écrit sur ce que je veux ne fonctionne pas? Bien sûr, il vaut mieux ne pas écrire autant que possible la logique dans les modèles, Je voulais que les petites opérations telles que la navigation dans le dictionnaire fonctionnent correctement.

J'ai trouvé d'autres solutions telles que la création de filtres de modèles par moi-même, Je pense que cette méthode est la plus belle pour le moment.

c'est tout.

P.S. M. Chanyu (@ chanyou0311) m'a appris. Je vous remercie.

Recommended Posts

J'ai eu du mal avec le branchement conditionnel dans les modèles de Django.
J'ai essayé d'intégrer Keras dans TFv1.1
Je veux recommencer avec Migrate de Django
Que dois-je faire avec DICOM de MPEG2?
Je veux faire la transition avec un bouton sur le ballon
J'avais des ennuis parce que je ne pouvais pas pousser avec heroku
J'étais accro au grattage avec Selenium (+ Python) en 2020
Je veux travailler avec un robot en python.
Mémo d'entrée / sortie de stockage par Python dans Azure Functions
Impossible de manipuler l'iframe dans la page avec Selenium
Trier les données de publication dans l'ordre inverse avec ListView de Django
Notez que j'ai traité du HTML dans Beautiful Soup
Mémo de travail que j'ai essayé i18n avec l'application Flask
Écrivez clairement du code qui augmente le branchement conditionnel