Django模型-通过孩子的兄弟姐妹之间的关系

问题描述

当它们之间的关系不是直接的而是通过MyModelC时,如何列出每个MyModelA的MyModelB对象。

models.py

class MyModelA(models.Model):
    name = models.CharField(max_length=50)

class MyModelB(models.Model):
    name = models.CharField(max_length=50)

class MyModelC(models.Model):
    name = models.CharField(max_length=50)
    my_model_a = models.ForeignKey(MyModelA,on_delete=models.CASCADE)
    my_model_b = models.ManyToManyField(MyModelB)

my_model_b_list_of_each_c_for_each_a.html

{% for a in object_list %}

{% for c in a.my_model_c_set %}

{% for b in c.my_model_b_set %} # Can I list MyModelBs of each MyModelC?

{% endfor %}

{% endfor %}

{% endfor %}

解决方法

如果只需要ModelB中的字段,则可以使用values_list:

ModelA.objects.values_list('modelC__modelB__name',flat=True)
# <QuerySet ['aaa','bbb',...] >

否则,您可以通过id在两个查询中获得模型:

ModelB.objects.filter(
    id__in=ModelA.objects.values_list(
        'modelC__modelB_id',flat=True
    )
)
# <QuerySet [<ModelB (1)>,<ModelB(2)]>

此外,如果您希望ModelC代表具有额外数​​据的“多对多”,则可以使用through

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...