从其他模型(而不是模型实例)返回外键模型



我有这样的模型:

class B(models.Model):
    value = models.CharField(etc...)
class A(models.Model):
    name = models.Charfield(
    fk = models.ForeignKey(B, etc...)

我的数据库中没有A的实例,但我很少有B的实例。我想做的是通过Django模板中的A模型(不是实例,因为我没有(获得B的所有实例。我在想,既然模型是一个对象,也许我们可以像传递任何其他对象一样传递它,并以某种方式使用它的属性。

示例

视图中.py

def my_view(request):
    B.objects.create(value=1)
    B.objects.create(value=2)
    B.objects.create(value=3)
    return render(request, 'template.html', {'model_a': A}

template.html中:

...
{% for b in a.fk_set.all %}
    {{ b }}
{% endfor %}
...

渲染为

1
2
3

我理解这是错误的,因为没有A实例,数据库不知道B在任何方面与A有关。

问题:有没有像我在例子中提到的那样获得类似效果的方法?

我找到了一种在视图中工作的方法,但它在模板中不起作用。

你需要的是这条线:

foo = A.fk.field.related_model.objects.all()

这将为您提供一个包含所有B条目的查询集:

<QuerySet [<B: B object (1)>, <B: B object (2)>, <B: B object (3)>, <B: B object (4)>, <B: B object (5)>]>

但这在模板中没有显示任何内容:

{% for b in model_a.fk.field.related_model.objects.all %}
    {{ b }}
{% endfor %}

您可以将foo查询集传递给模板并对其进行迭代。

最新更新