Django 1.10: ошибка при удалении модели с GenericRelation
В моем проекте я сопоставляю модели, наследуемые от класса A, с моделями типа B, используя GenericRelation через третью модель, ABMapping.
models.py:
class A(models.Model):
b = GenericRelation(B)
class Meta:
abstract = True
class ABMapping(models.Model):
b = models.ForeignKey(B)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class B(models.Model):
x = ...
y = ...
В администраторе Django, когда я пытаюсь удалить объект потомка A, я получаю сообщение об ошибке: "Не удается разрешить ключевое слово u'object_id'в поле. Доступны следующие варианты: x, y, id, abmapping". Кажется, что он пытается взять поле из ABMapping, но найти его в B.
Как видите, я урезал свои модели до минимума, но проблема все еще возникает.
Даже когда я удаляю все ABMappings для объекта дочернего класса A, возникает та же проблема.
Все, казалось бы, связанные с Stackru вопросы касаются людей, жалующихся на то, что каскадного удаления не происходит... но я даже не могу добиться удаления верхнего уровня.
Все с этими моделями некоторое время работало нормально... кроме этой проблемы удаления из админа, которая никогда не работала с самого начала. Что мне здесь не хватает?
Спасибо!
1 ответ
Ваша модель A не имеет отношения к B, она имеет отношение к ABMapping. Таким образом, отношение в A должно быть GenericRelation(ABMapping)
,
Существует концепция отношения "многие ко многим", использующая другую модель в качестве соединительной таблицы, но та, которая требует фактического ManyToManyField с аргументом through=ABMapping, и две, я не верю, что это может сработать, если одна из два внешних ключа - это GenericForeignKey.