假设我有一个项目模型,它与特性M2M关系:

class Item(models.Model):
    features = models.ManyToManyField(to = 'Feature')

现在我想过滤Item查询集,使其只包含至少具有所有指定功能的项。
假设可能的特性是:CameraTouchscreenKeyboard
现在我想选择所有既有相机又有键盘的项目
有什么解决办法吗?

最佳答案

假设特征的模型有一个名为“name”的字段,则可以在值列表中筛选与该字段匹配的项。像这样的方法会奏效:

Item.objects.filter(features__name__in=['Camera', 'Touchscreen', 'Keyboard'])

更新:
正如stalk所说,要获得与所有功能匹配的项,您需要对查询执行许多“筛选”。动态获取它的方法是:
features = ['Camera', 'Touchscreen', 'Keyboard']
items = Item.objects.all()

for feature in features:
  items = items.filter(feature__name=feature)

这样您就可以传递一个动态特性列表来匹配项。

关于python - Django:按交集结果过滤queryset,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16239895/

10-11 17:50