微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。