Django ForeignKey в абстрактном модельном классе и нескольких управляемых классах вызывает конфликт имен

Я определил абстрактный класс, и он имеет ForeignKey, У меня есть несколько классов производных моделей, но когда я пытаюсь сгенерировать сценарий миграции схемы, на юге появляется ошибка.

class BlogEntryBase(models.Model):
    author = models.CharField(null=True, blank=True, max_length=100)
    title = models.CharField(null=True, blank=True, max_length=255)
    created_by = models.ForeignKey("main.UserProfile", verbose_name="Created By", related_name="%(class)s_set", blank=False, null=False)

class CatBlogEntry(BlogEntryBase):
    pass

class DogBlogEntry(BlogEntryBase):
    pass

Сообщения об ошибках:

animal.catblogentry: Accessor for field 'created_by' clashes with related field 'UserProfile.catblogentry_set'. Add a related_name argument to the definition for 'created_by'.
animal.catblogentry: Reverse query name for field 'created_by' clashes with related field 'UserProfile.catblogentry_set'. Add a related_name argument to the definition for 'created_by'.
animal.dogblogentry: Accessor for field 'created_by' clashes with related field 'UserProfile.dogblogentry_set'. Add a related_name argument to the definition for 'created_by'.
animal.dogblogentry: Reverse query name for field 'created_by' clashes with related field 'UserProfile.dogblogentry_set'. Add a related_name argument to the definition for 'created_by'.

Как видите, я уже уточняю related_name аргумент. Я думаю, проблема в том, что на UserProfile сбоку будет два заданных объекта, и они как-то конфликтуют? Как вы видите, я пытался переставить связанное имя, как "%(class)s", но этого недостаточно. Я не хочу перемещать класс внешнего ключа к производным классам, потому что, вероятно, из-за этого мне придется повторять представление и формировать код. У кого-нибудь есть совет? Моя цель СУХАЯ. Держите две таблицы блогов раздельными, но обрабатывайте их с помощью общих шаблонов, представлений и кодов форм.

Обратите внимание "main.UserProfile" строка, чтобы избежать циклической зависимости модуля

1 ответ

Решение

Я настолько упростил свой пример, что фактически исключил причину ошибки. У меня было два внешних ключа и всего 8 сообщений об ошибках. ForeignKeys относится к той же сущности, UserProfile: created_by, modified_by, Проблема заключалась в том, что я использовал просто

related_name="%(class)s_set"

в то время как мне нужно было различать эти два

related_name="%(class)s_something_unique_set"

Вот так:

class BlogEntryBase(models.Model):
    author = models.CharField(null=True, blank=True, max_length=100)
    title = models.CharField(null=True, blank=True, max_length=255)
    created_by = models.ForeignKey("main.UserProfile", verbose_name="Created By", related_name="%(class)s_created_by_set", blank=False, null=False)
    modified_by = models.ForeignKey("main.UserProfile", verbose_name="Modified By", related_name="%(class)s_modified_by_set", blank=False, null=False)

class CatBlogEntry(BlogEntryBase):
    pass

class DogBlogEntry(BlogEntryBase):
    pass
Другие вопросы по тегам