所以我有以下模型:
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