2

初心者の質問...

モデル:

Item(model.Models):
    ...
    attributes = models.ManyToManyField('Attributes', null=True)
    ...


Attributes(models.Models):
    title = models.CharField(max_length=100, unique = True)
    value = models.TextField()
    ...

[attObj1, attobj2, attObj3, attObjN]テーブルをフィルタリングするときに使用する属性オブジェクトのリストがありItemます。次のクエリが機能します。

items = Item.objects.filter(attributes = attObj1 and attObj2 and attObj3)

問題attObj1 and attObj2 and attObj3... and attObjNは、リスト内の属性の量が不明であるため、クエリ(つまり、:)を動的に作成する必要が

運が悪かった次の複雑なクエリセットを使用してみました(ソース)。空のリストを返しました。

attList = [attObj1, attObj2, attObj3]
query = Q(attributes = attList.pop(0))
for att in attList:
    query = query & Q(attributes=att)

items = Item.objects.filter(query)

これは可能ですか?

4

1 に答える 1

2

あなたが試すことができます:

items = Item.objects.filter(attributes__in=attList)

編集:フィルターを連鎖/複数化することもできます

attList = [attObj1, attObj2, attObj3]
fitems = Items.objects.filter()
for att in attList:
     fitems = fitems.filter(attributes=att)

fitemsattListに属性を持つオブジェクトを含むセットに縮小されます。

于 2012-07-10T04:55:24.593 に答える