Я новичок в программировании на Django и пытаюсь освоить GenericForeignKeys.
Мне удалось создать общий внешний ключ, который хранится в базе данных, но модель, по-видимому, не обеспечивает ссылочную целостность,
(т.е. я могу создать ссылку на идентификатор типа объекта, где этот идентификатор объекта не существует)
(например, content_type: "post", content_id: 123, но post 123 не существует).
(Прежде чем вы это скажете - Да, я знаю, что у Django есть некоторые возможности для тегирования - это действительно простой пример / тест для меня, чтобы понять общие внешние ключи и выяснить, как они работают, чтобы я мог реализовать их в других ситуациях)
Моя базовая модель:
class Tag(NamedModel, models.Model):
taggable_models = models.Q(models.Q(model='post') | models.Q(model='discussion'))
content_type = models.ForeignKey(
ContentType,
models.CASCADE,
limit_choices_to=taggable_models,
)
content_id = models.PositiveIntegerField(
_("content id"),
)
content_object = GenericForeignKey(
'content_type',
'content_id',
)
В моем admin.py у меня есть:
@admin.register(Tag)
class TagAdmin(VersionAdmin):
readonly_fields = ('created_at',)
list_display = ('content_type', 'content_id', 'created_at', )
fieldsets = (
(None, {
'fields': ('content_type', 'content_id', 'created_at', ),
}),
)
autocomplete_lookup_fields = {
'generic': [['content_type', 'content_id']],
}
Однако, когда я запускаю страницу администратора, это позволяет мне создать тег для идентификатора записи, который не существует.
Есть ли способ, которым я могу обеспечить ссылочную целостность здесь? Я думаю, мне нужно как-то использовать content_object GenericForeignKey, но я не могу понять, как это сделать?
Спасибо за любую помощь,
Кристофер.