Я создаю объект, который отслеживает изменения (Обновления) относительно создания, обновления и удаления другого так называемого UUIDSyncable
объекты в базе данных.
Это включает любой объект, который расширяется UUIDSyncable
классы save()
и delete()
переопределяемые методы, таким способом, которым это создает новое Update
объект, записывающий действие (или вставляют, обновите или удалите), и первоначально a 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
содержание имени модели использоваться подобным способом?
Возможно, вам нужно установить null = True в базовых полях content_type
и object_id
, составляющих общий иностранный ключ.
Вы пробовали установить null = True
на GenericForeignKey
? Общие внешние ключи не являются концепцией, которая распознается приложением низкоуровневой базы данных (например, MySQL, SQLite и т. Д.), Поэтому вы должны иметь возможность указать, что поле имеет значение NULL.
null = True
в поле базы данных в Django означает, что поле базы данных, представляющее эти данные, разрешено быть пустым, тогда как blank = True
сообщает формам Django / проверка модели, что поле можно оставить пустым пользователем (или вами, через интерфейс администратора). Следовательно, вам может потребоваться использовать оба, чтобы добиться того, что вам нужно.