Django自定义保存不工作

时间:2014-02-08 23:44:07

标签: python django django-models

所以我有以下模型:

class Info(models.Model):
    user_id = models.BigIntegerField(primary_key=True)
    #...
    def save(self,*args,**kwargs):
        print 1
        is_created = False
        if not self.pk:
            print 2
            is_created = True
        super(Info, self).save(*args, **kwargs)
        print 3
        if is_created:
            print 4
            signals.info_created.send(sender=self.__class__,info=self)

现在我有那些打印语句来跟踪发生了什么。当我运行Info.create(...)

info = Info(...)
info.save()

我得到以下输出:

1
3

表明if not self.pk语句评估为false。现在我假设这是因为我有一个自定义主键需要在创建该对象时给出。所以这是我的问题:我的假设是否正确?无论是否,我如何才能使这个自定义保存合作?

1 个答案:

答案 0 :(得分:1)

在base.py模型中:

def _get_pk_val(self, meta=None):
    if not meta:
        meta = self._meta
    return getattr(self, meta.pk.attname)

meta_pk指向user_id,在调用create或save之前从构造函数中的kwargs填充元

class Info(models.Model):
    user_id = models.BigIntegerField(primary_key=True)
    text = models.TextField()

    def save(self,*args,**kwargs):
        print 1
        is_created = False
        if not self.pk:
            print 2
            is_created = True

        self.pk = 20 #set pk before super call to pass validation

        super(Info, self).save(*args, **kwargs)
        print 3
        if is_created:
            print 4


Info.objects.create(text='wew')
#prints 1 2 3 4