1

ActivityLog次のフィールドを持つ汎用外部キーを定義する Django モデルがあります。

model_type = models.ForeignKey(ContentType, verbose_name=_("Object type"))
object_id = models.PositiveIntegerField(_("Object id"))
object = generic.GenericForeignKey('model_type', 'object_id')

関連が削除されていない (None ではない)ActivityLogインスタンスをフィルタリングする必要があります。objectDjango は on delete カスケードを実行しないGenericForeignKeyため、この望ましくないレコードをルックアップから除外する必要があります。これを行うための簡単で標準的で効率的な方法はありますか?

素晴らしい世界では、次のようなものを使用します。

real_activity_logs = ActivityLog.objects.filter(object__isnull=False)

しかし、これはobjectデータベース フィールドではないため機能しません。

4

1 に答える 1

1

これらのインスタンスをカスケードで削除したい場合は、指定されたオブジェクトにActivityLogを定義することで削除できます。ドキュメントGenericRelationから:

また、GenericRelation を持つオブジェクトを削除すると、それを指している GenericForeignKey を持つオブジェクトも削除されることに注意してください。

于 2013-08-26T05:46:49.320 に答える