好的,我一直在阅读其他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,除非它解决了手头的问题)
答案 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)
我猜测如果没有它,你最终会在继承模型之间产生干扰。