1
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 ,我决定使用它。正所谓“无需重新发明轮子”。它奏效了,实际上让我省了很多麻烦,我现在可以把注意力集中在其他事情上。

4

3 回答 3

1

我认为您所追求的答案已经在另一个线程中得到了回答。

在 Django 中获取相关值的最佳实践

虽然(未经测试)在我的脑海中,尝试这样的事情:

model2_instance = Model2.objects.filter(model1__pk=1) 
于 2013-03-06T13:56:53.340 回答
0

谢谢大家的贡献。我偶然发现了这个 [API]:https ://github.com/japsu/django-selectreverse ,我决定使用它。正所谓“无需重新发明轮子”。它奏效了,实际上让我省了很多麻烦,我现在可以把注意力集中在其他事情上。

于 2013-03-07T10:18:36.333 回答
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 %}
于 2013-03-06T14:17:34.070 回答