Django: наследование моделей: FK & M2M - PullRequest
3 голосов
/ 18 октября 2010

Я дам эту попытку: http://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name

Использование этого стиля

Это сохраняется как common / abstract.py

class OtherModel(models.Model):

   something = Charfield(max_length=100)

   class Meta:
            abstract = True

class Base(models.Model):
        fk_model = models.ForeignKey(OtherModel, related_name="%(app_label)s_%(class)s_related")

        class Meta:
            abstract = True

Затем я импортирую егов другой файл.Давайте назовем это app / models.py

from common.abstract import Base

class ChildB(Base):
    pass

Я установил «приложение», но не «общее».Он будет хорошо импортироваться без отношения FK или M2M, но когда я пытаюсь добавить его, я получаю эту ошибку:

/ lib / python2.6 / site-packages / django / db / models / fields / related.py ", строка 808, в init не указывать. meta.abstract,"% s не может определить отношение с абстрактным классом% s "% (self. class . _name__, to._meta.object_name) AssertionError: ForeignKey не может определить отношение с абстрактным классом OtherModel

Пожалуйста, сообщите .... также дайте мне знать, если у вас есть какие-либо вопросы или вы чего-то не понимаетечто я объясняю. Файл, с которым я работаю, действительно сложный, поэтому я не хотел публиковать все это, так как знал, что это нарушает эти отношения.

Ответы [ 2 ]

2 голосов
/ 18 октября 2010

Вы не можете иметь отношения с абстрактной моделью, но это то, что вы пытаетесь сделать (ManyToManyField до OtherModel).Если вы хотите сделать эту работу, вам нужно удалить abstract = True из OtherModel и добавить common к вашему INSTALLED_APPS!

Если вы хотите относиться к различным подклассам OtherModel из подклассов Base, вам нужно определить отношение на подклассе, а не на абстрактной модели!

1 голос
/ 18 октября 2010

Я разобрался с проблемой .....

Это будет работать:

from django.db import models

class CommonInfo(models.Model):

    name = models.CharField(max_length=100)

class Base(models.Model):
    m2m = models.ForeignKey(CommonInfo, related_name="%(app_label)s_%(class)s_related")

    class Meta:
        abstract = True

class ChildA(Base):
    pass

Это даст вам ошибку: AssertionError: ForeignKey не может определить отношение с абстрактным классом OtherModel . Это потому, что вы не можете иметь отношения FK или M2M в абстрактном указателе на ДРУГОЙ абстрактный класс ,

from django.db import models

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

    name = models.CharField(max_length=100)

class Base(models.Model):
    m2m = models.ForeignKey(CommonInfo, related_name="%(app_label)s_%(class)s_related")

    class Meta:
        abstract = True

class ChildA(Base):
    pass

Это печальная новость для меня. Печальные новости действительно. Я надеюсь, что мои печальные новости принесут пользу кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...