Django:如何保存继承的模型?

时间:2013-02-24 18:13:24

标签: django

class Conversation(models.Model):
    contact             = models.ForeignKey(Contact)
    conversation_datetime = models.DateTimeField()    
    notes               = models.TextField(_(u'Notes'),        blank=True)    

    def __unicode__(self):
        return self.conversation_datetime


class Conversation_history(Conversation):
    log_date_time = CreationDateTimeField()
    def __unicode__(self):
        return self.conversation_datetime

不确定这是否是最好的,但我希望创建每个主要模式的历史表,以便我可以跟踪客户正在做的事情,并在支持案例中帮助他们。

我基于原始模型创建了一个新模型。但是当我保存新模型的实例时,原始表将被填充。我不明白为什么。

call = Conversation(contact='', conversation_datetime = '', notes='')
call.save()

ch = Conversation_history(contact='', conversation_datetime = '', notes='')
ch.save()

1 个答案:

答案 0 :(得分:1)

因为您尚未将Conversation模型声明为抽象。您正在使用多表继承。看看docs

如果您想要存储在您孩子身上的所有数据,那么您应该执行类似的操作 -

class ConversationBase(models.Model):
    contact             = models.ForeignKey(Contact)
    conversation_datetime = models.DateTimeField()    
    notes               = models.TextField(_(u'Notes'),        blank=True)  

    class Meta:
        absract = True

class Conversation(ConversationBase):
    pass

class ConversationHistory(ConversationBase):
    log_date_time = CreationDateTimeField()