Django 自定义保存不起作用



所以我有以下模型:

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。现在我假设这是因为我有一个自定义主键,需要在创建该对象时给出。所以我的问题是:我的假设正确吗?不管它是否是,我怎样才能让这个自定义保存来配合?

在 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,在调用创建或保存之前从构造函数中的 kwarg 填充元

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

相关内容

最新更新