如何解决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 举报,一经查实,本站将立刻删除。