Я создаю объект, который отслеживает изменения (Обновления) в отношении создания, обновления и удаления других так называемых 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, содержащий имя модели, будет использоваться аналогичным образом?