我可以更有效地编写以下Django代码吗?

时间:2015-06-06 11:39:13

标签: django loops templates object nested

我有几个型号 - 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的简化版本。如果可以,也可以在那里回答!

1 个答案:

答案 0 :(得分:2)

以下方式您不需要查询所有分数,也不需要比较对象。但我确信你要解决的问题是不同的:)。

{% for user in users %}
    {% for score in user.score_set.all %}
    {{ user }} -- {{ score.subject }} -- {{ score.score }} <br>
    {% endfor %}
{% endfor %}