如何使用 Django ORM 一次过滤 2 个属性

问题描述 投票:0回答:2

我有以下型号:

class Parent(models.Model):
    item_involved = models.ManyToManyField(Item, through=ItemInvolved)


class ItemInvolved(models.Model):
    parent = models.ForeignKey(Parent, related_name='item_involvement')
    item = models.ForeignKey(Item)
    kind = models.PositiveIntegerField()

我想检索

Parent
的 pk=20 且其
Item
的 kind=10 的所有
ItemInvolved

编辑:

假设我有以下对象:

Parent(pk=1)
Parent(pk=2)
Parent(pk=3)
ItemInvolved(pk=11, parent=1, item=18, kind=10)
ItemInvolved(pk=12, parent=1, item=19, kind=10)
ItemInvolved(pk=13, parent=1, item=20, kind=10)
ItemInvolved(pk=14, parent=2, item=20, kind=10)
ItemInvolved(pk=15, parent=3, item=19, kind=10)
ItemInvolved(pk=16, parent=3, item=20, kind=20)

我需要一个会产生结果的查询:

[<Parent: 1>, <Parent: 2>]
django django-models many-to-many django-queryset django-orm
2个回答
1
投票

parents = Parent.objects.filter(item=20, item__kind=10)

好的。明白了。

parents = Parent.objects.filter(item_involved=20, item_involvement__kind=10)

关于跨越多值关系的进一步解释。


0
投票

如果您想记录异常,如果相应的查询不成功:

try:
     parent = Parent.objects.get(item=20, item__kind=10)
except Exception as e:
     print "[CRITICAL] <some_view.py> - {}".format(e)

© www.soinside.com 2019 - 2024. All rights reserved.