2

次のモデル(簡略化)があります。警告モデルは、機会オブジェクト(他のタイプも含む)を含めることができる汎用外部キーです。

Occasion(models.Model):
    start_date = models.DateField()


Warnings(models.Model):
    status = models.CharField()
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

警告がない機会を取得したいだけでなく、警告テーブルに status='new' がある機会を除外したいと考えています。このクエリはどのように記述すればよいですか?

編集:これは正しい結果を得るSQLです

select * from occasion left join warnings 
on occasion.id = warnings.object_id 
and warnings.content_type_id = 13 --type id for the model.
and warnings.status <> 'new';

もう一度編集:

これが私がそれを解決した方法です:

#First get any occasions with status='new' from warnings
ctype = ContentType.objects.get(app_name="myapp", model="ocassion")

warnings = warning.objects.filter(content_type=ctype, status='new')

#Filter out only object_ids
warning_occasion_list = set(list(warnings.values_list('object_id', flat=True))

#Then exclude these from the occasion query
occasions = occasion.objects.all().exclude(occasion_id__in=warning_occasion_list)
4

0 に答える 0