Проблемы наследования Джанго - PullRequest
1 голос
/ 02 марта 2011

Хорошо, я читал другие вопросы о наследовании django, и я не могу найти ничего, чтобы помочь.У меня может быть просто проблема понимания того, как работает наследование.Но вот моя проблема.Для начала у меня есть две базовые модели, от которых я хотел бы унаследовать все остальные мои модели.Базовая модель просто содержит несколько полезных методов для всех моих моделей.Второе - это запуск объекта, относящегося к учетной записи.

class BaseModel(models.Model):

# A couple of methods that all my models need to have. No fields. 

class AccountModel(models.Model):
    ''' A base model for items related to a specific account'''

    account = models.ForeignKey(Account)

    def save(self, request, *args, **kwargs):
        self.account = request.session['account']
        super(AccountModel, self).save(*args, **kwargs)

Тогда у меня есть три модели:

class Keyword(AccountModel) :
    keyword = models.CharField(max_length=300)
    #other fields, none required...

class Project(AccountModel) :
    project_name = models.CharField(max_length=200,verbose_name="Project Name")
    #other fields..

class KeywordTarget(BaseModel):
    keyword = models.ForeignKey(Keyword)
    url = models.URLField(null=True,blank=True)
    project = models.ForeignKey(Project)

Но когда я пытаюсь создать новое ключевое слово, я получаю эту ошибку:

ValueError: Cannot assign "'something'": "Keyword.keyword" must be a "Keyword" instance.

, когда яdo:

kw = Keyword(keyword = "something")

Куда я иду не так?

(Также, пожалуйста, не говорите мне, что я должен использовать ManyToMany до тех пор, пока это не решит проблему под рукой)

1 Ответ

2 голосов
/ 02 марта 2011

Похоже, что и BaseModel, и модель Account будут абстрактными, поэтому вы должны указать это в мета-объектах моделей, таких как:

class BaseModel(models.Model):
    ...

    class Meta:
        abstract=True

(см. http://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes)

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

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