这是我创建的模型
class Jeu(models.Model):
nom = models.CharField('Nom du jeu', max_length=100)
logo = models.ImageField(blank=True)
def courses_a_venir():
return self.course_set.filter(date_evenement__gte = datetime.today()).order_by('date_evenement')
def courses_passees():
return self.course_set.filter(date_evenement__lt = datetime.today()).order_by('-date_evenement')[:3]
class Course(models.Model):
jeu = models.ForeignKey(Jeu, verbose_name='Nom du jeu', on_delete=models.CASCADE)
ligue = models.ForeignKey(Ligue, on_delete=models.CASCADE)
circuit = models.ForeignKey(Circuit, on_delete=models.CASCADE)
date_evenement = models.DateTimeField("Date de la course")
以下是该视图:
def home(request):
jeux = Jeu.objects.all()
return render(
request,
'base_site/home.html',
context={'title': 'Accueil', 'jeux': jeux,}
)
下面是HTML代码:
{% for jeu in jeux %}
<h3>{{ jeu.nom }}</h3><br>
<div class="row row-cols-1 row-cols-md-3 g-4">
{% for course in jeu.courses_a_venir %}
<div class="col">
<div class="card">
<!--<img src="..." class="card-img-top" alt="...">-->
<div class="card-body">
<h5 class="card-title">{{ course.date_evenement }}</h5>
<p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
</div>
<div class="card-footer">
<small class="text-muted">{{ course.date_evenement }}</small>
</div>
</div>
</div>
{% endfor %}
</div><br>
{% endfor %}
<br><br>
问题是,一个“Jeu”可以被多个“Course”调用,因为它目前是在HTML代码中实现的,它会检索表“Jeu”中的所有“Jeu”和关联的“Course”,无论是否有一些“Jeu”不包含任何“Course”。
有人知道如何只显示包含至少一个“课程”的“Jeu”吗?
1条答案
按热度按时间t3psigkw1#
您可以使用
course_set
访问jeux
链接到的所有课程。这适用于您的所有模型,您可以使用{model}_set
或通过在ForeignKey上指定related_name
来执行反向查找。你可以在这里找到一个例子:https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_one/
course_set
是一个查询集,因此您可以正常地对它们使用all
、filter
...操作。