Я создаю объект, который отслеживает изменения (Обновления) в отношении создания, обновления и удаления других так называемых UUIDSyncable
объектов в базе данных.
Это включает в себя любой объект, который расширяет методы UUIDSyncable
classes save()
и delete()
, которые переопределяются, таким образом, что он создает новый объект Update
, который регистрирует действие (вставлять, обновлять или удалять) и первоначально поле models.CharField(max_length=64)
, определяющее UUID pk из объектов UUIDSyncable
.
На этом этапе я хотел обновить реализацию, чтобы использовать поле Django generic.GenericForeignKey()
вместо моего единственного символьного поля. Это позволит получить доступ к объекту, о котором обновление записывается гораздо проще.
Моя проблема возникает, когда вы хотите удалить объект и сохранить его как объект Update
, поскольку вы знаете, что Django создает каскадное удаление объекта UUIDSyncable
, удаляя все предыдущие записи Update
(которые не требуется).
Когда объект UUIDSyncable
был удален в моей первоначальной реализации, каждый объект Update
все равно сохранит UUID, чтобы информировать внешние стороны об его удалении. Моим первым решением эмулировать это было установить content_object = None
непосредственно перед удалением объекта на всех объектах Update
, тем самым предотвращая каскад удаления.
Это означает, что generic.GenericForeignKey()
нельзя установить для значений NULL
. Есть ли способ сделать это, или если не так, как стандартный CharField
, содержащий первичный ключ UUID, и sperate CharField
, содержащий имя модели, будет использоваться аналогичным образом?