Django继承问题

时间:2011-03-01 23:49:00

标签: django inheritance django-models

好的,我一直在阅读其他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.

当我这样做时:

kw = Keyword(keyword = "something")

我哪里错了?

(另外,请不要告诉我,我应该使用ManyToMany,除非它解决了手头的问题)

1 个答案:

答案 0 :(得分:2)

看起来BaseModel和Account模型都是抽象的,所以你应该在模型的Meta对象中指定它:

class BaseModel(models.Model):
    ...

    class Meta:
        abstract=True

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

我猜测如果没有它,你最终会在继承模型之间产生干扰。