0

以下を含むテーブルがあります。

content_type = models.ForeignKey(ContentType, null=True, default=None)
object_id = models.PositiveIntegerField(null=True, default=None)
content_object = generic.GenericForeignKey('content_type', 'object_id')

content_typeisがNullORの場合にフィルタリングできるようにしたいのですが、そうcontent_typeでない場合は、特定のオブジェクトのフィールドNullをチェックして、それが「Y」であることを確認したいと思います。activeどうすればその比較を実行できますか?

以下を含む多くのサイトをチェックしました:

http://ui.co.id/blog/generic-field-filtering-in-django

編集

これに対する私の唯一の解決策は、フィルターステートメントの後にループして、適切なフィールドfor loopを持たないオブジェクトを削除することです。activeこれは非効率的です...もっと良い方法はありますか?

4

1 に答える 1

0

その場合、おそらくあなたはこのようなことをするかもしれません:

ケース1:

result = []
result += Model.objects.filter(content_type__isnull=True)

ケース2:

active_object_ids = ObjectClass.objects.filter(active='Y').values_list('id', flat=True)
result += Model.objects.filter(object_id__in = active_object_ids)

唯一の欠点は、ケース2では、GFKによってリンクされているすべてのオブジェクトのすべてのIDを収集する必要がある場合があることです。また、content_objectを保存するたびに、content_typeも一緒に保存されるため、2番目のケースではcontent_typeをテストする必要はありません。

于 2012-10-19T22:20:14.743 に答える