Найти - Пользователи
Полная версия: Вопрос с наследованием и связями между моделями и related_name
Начало » Django » Вопрос с наследованием и связями между моделями и related_name
1
vvp91
Есть следующая иерархия:
from django.db import models

class BaseModel(models.Model)
class Meta:
abstract = True

class Member(BaseModel)
pass

class BaseTradeItem(BaseModel)
member = models.ForeignKey(Member,verbose_name=_(u'Участник'))
class Meta:
abstract = True

class PrivateTradeItem(BaseTradeItem):
partner = models.ForeignKey(Member,verbose_name=_(u'Адресат')) # ЗДЕСЬ НАЧИНАЕТСЯ ПРОБЛЕМА
class Meta:
abstract = True

class PrivateOffer(PrivateTradeItem):
pass

class PrivateDemand(PrivateTradeItem):
pass
Валидацию (manage.py validate) модель не проходит, пишет:
privateoffer: Accessor for field ‘member’ clashes with related field ‘Member.privateoffer_set’. Add a related_name argument to the definition for ‘member’.
privateoffer: Accessor for field ‘partner’ clashes with related field ‘Member.privateoffer_set’. Add a related_name argument to the definition for ‘partner’.

Естественно, что классы обладают дополнительными аттрибутами, которые здесь не показаны. От BaseTradeItem, помимо абстрактного PrivateTradeItem, есть конечные наследники, для которых джанга сама корректно определяет значение related_name аттрибута member.

Выделять аттрибут partner из базового класса PrivateTradeItem в каждый конечный класс PrivateDemand и PrivateOffer - это самое простое, но и самое неверное решение.

ВОПРОС: Как задать значение related_name для аттрибута partner в каждом конечном классе PrivateDemand и PrivateOffer?
vvp91
vvp91
ВОПРОС: Как задать значение related_name для аттрибута partner в каждом конечном классе PrivateDemand и PrivateOffer?
Сформулировав подробно вопрос, тут же нашел ответ. Воистину - полезно поговорить с умными людьми.
Помого раздел документации http://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB