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.
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