Может дженерик. Поле GenericForeignKey() быть Пустым?

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

22
задан Marcus Whybrow 1 March 2010 в 16:09
поделиться

2 ответа

Возможно, вам нужно установить null = True в базовых полях content_type и object_id , составляющих общий иностранный ключ.

26
ответ дан 29 November 2019 в 03:57
поделиться

Вы пробовали установить null = True на GenericForeignKey ? Общие внешние ключи не являются концепцией, которая распознается приложением низкоуровневой базы данных (например, MySQL, SQLite и т. Д.), Поэтому вы должны иметь возможность указать, что поле имеет значение NULL.

null = True в поле базы данных в Django означает, что поле базы данных, представляющее эти данные, разрешено быть пустым, тогда как blank = True сообщает формам Django / проверка модели, что поле можно оставить пустым пользователем (или вами, через интерфейс администратора). Следовательно, вам может потребоваться использовать оба, чтобы добиться того, что вам нужно.

-3
ответ дан 29 November 2019 в 03:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: