Подтвердить что ты не робот

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

На этот раз я думаю, что это не я, будучи глупым, но реальным конфликтом. У меня есть следующий код (упрощенный):

from django.db import models

class Alpha(models.Model):
    relation = models.ForeignKey('Delta', related_name = 'reverse_relation', blank = True, null = True)

    class Meta:
        abstract = True

class Beta(Alpha):
    pass

class Gamma(Alpha):
    pass

class Delta(models.Model):
    pass

Проблема заключается в том, что Delta.reverse_relation может ссылаться на экземпляр Beta или экземпляр Gamma. Я должен каким-то образом предоставить несколько значений связанных имен (или тот, который зависит от имени класса). Я думаю, что проблема ясна, но должна быть полной, ошибка (при запуске syncdb):   app.beta: Аксессуар для связей "отношения" поля со связанным полем "Delta.reverse_relation" . Добавьте аргумент related_name в определение для отношения.   app.beta: Обратное имя запроса для столкновений 'отношения' со связанным полем 'Delta.reverse_relation'. Добавьте аргумент related_name в определение для отношения.   app.gamma: Accessor для связи "отношения" поля со связанным полем "Delta.reverse_relation" . Добавьте аргумент related_name в определение для отношения.   app.gamma: Обратное имя запроса для связей "отношения" поля со связанным полем "Delta.reverse_relation" . Добавьте аргумент related_name в определение для 'отношения'.

Возможно ли вообще разместить ForeignKey в родительском Alpha или это единственный способ вырезать этот код для бета-версии и гаммы? Я предпочитаю не делать этого, потому что это как бы поражает точку наследования, если я не могу определить в родительской половине поля, которые разделяют все дети.

Любая помощь очень искушена!

(Если кто-нибудь может прокомментировать, почему сообщения об ошибках не указаны в поле кода, я исправлю это.)

4b9b3361

Ответ 1

Я думаю, что вы найдете следующий совет в документации Django полезной и актуальной: https://docs.djangoproject.com/en/1.7/topics/db/models/#be-careful-with-related-name

По существу изменить объявление поля отношения на:

relation = models.ForeignKey('Delta', related_name="%(app_label)s_%(class)s")

Удачи...