所以我有以下模型:
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。现在我假设这是因为我有一个自定义主键需要在创建该对象时给出。所以这是我的问题:我的假设是否正确?无论是否,我如何才能使这个自定义保存合作?
答案 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