Django foreignkey查询

时间:2013-03-06 13:46:30

标签: django

class Model1(models.Model):
    a1 = models.CharField()

class Model2(models.Model):
    a2 = models.CharField()
    model1 = ForeignKey(Model1)

我想在

中做这样的事情
#views.py

def action(request):
    model1_instances = Model1.objects.all()
    render_to_respose('action.html', 'model1_instances': model1_instances, context_instance=RequestContext(request)

我想做的是;

对于传递给action.html的每个'model1_instances'对象,我想要它对应的Model2对象。

尝试使用model2_instance = model1_instances.model2_set.all(),它没有提供所需的结果,可能是因为model1_instances返回数据库中的所有Model1对象。

我所知道的

如果我使用类似的东西;

model1_instance = Model1.objects.get(pk=1)

很容易得到相应的

model2_instance = model1_instance.model2_set.all().

我已经知道了,这不是我要找的东西。

需要一些线索的人。

解决方案

谢谢大家的贡献。我偶然发现了这个[API]:https://github.com/japsu/django-selectreverse我决定使用它。就像俗话说的那样“没有必要重新发明轮子”。它起作用,实际上让我很头疼,现在我可以将注意力集中在其他方面了。

3 个答案:

答案 0 :(得分:1)

我认为您所追求的答案已在另一个主题中得到解答。

Best practice to get related values in Django

虽然离开我的头顶(未经测试),尝试这样的事情:

model2_instance = Model2.objects.filter(model1__pk=1) 

答案 1 :(得分:0)

你会得到Model1的实例:

model1 = Model1.objects.get(pk=1)

然后要获取使用其FK引用它的Model2实例,请尝试:

model2 = model1.Model2_set.all()

这将返回引用Model1实例的所有Model2实例的集合。

我从Backwards related objects

获取了相关信息

修改 获取模板中的相关Model2实例而不是查看:

{% for model1 in model1_instances %}
    {% for model2 in model1.Model2_set.all %}
    {{ model2 }}
    {% endfor %}
{% endfor %}

答案 2 :(得分:0)

谢谢大家的贡献。我偶然发现了这个[API]:https://github.com/japsu/django-selectreverse我决定使用它。就像俗话说的那样“没有必要重新发明轮子”。它起作用,实际上让我很头疼,现在我可以将注意力集中在别的东西上。