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.

Другие вопросы по тегам