我有几个型号 - User
& Score
。我正在将这些模型的数据显示到我的模板中。来自Score
的数据会根据User
的数据进行过滤。我在模板中使用嵌套for循环和if条件来获得我想要的结果。但是,我想知道是否有更好的方法来得出相同的结果,因为一旦数据变得庞大,嵌套的for循环就会耗费大量的时间和资源。
models.py
class User(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
class Score(models.Model):
user = models.ForeignKey('User')
subject = models.CharField(max_length=20)
score = models.IntegerField()
views.py
def Home(request):
users = User.objects.all()
scores = Score.objects.all()
return render(request, "home.html", {'users': users, 'scores': scores})
home.html(模板)
{% for user in users %}
{% for score in scores %}
{% if score.user == user %} {{ user }} -- {{ score.subject }} -- {{ score.score }} <br>{% endif %}
{% endfor %}
{% endfor %}
结果
Michel -- Physics -- 80
Michel -- Chemistry -- 90
Zarif -- Physics -- 100
Zarif -- Biology -- 80
此问题是this的简化版本。如果可以,也可以在那里回答!
答案 0 :(得分:2)
以下方式您不需要查询所有分数,也不需要比较对象。但我确信你要解决的问题是不同的:)。
{% for user in users %}
{% for score in user.score_set.all %}
{{ user }} -- {{ score.subject }} -- {{ score.score }} <br>
{% endfor %}
{% endfor %}