Django:id字段的值为零
我想为django项目中的所有组创建一个唯一的id,这将帮助我们轻松地检测用户操作 我尝试了以下方法: 型号:Django:id字段的值为零,django,django-models,Django,Django Models,我想为django项目中的所有组创建一个唯一的id,这将帮助我们轻松地检测用户操作 我尝试了以下方法: 型号: class Group1(models.Model): urlhash = models.CharField(max_length=6, null=True, blank=True, unique=True) user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=T
class Group1(models.Model):
urlhash = models.CharField(max_length=6, null=True, blank=True, unique=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=True,blank=True)
group_name = models.CharField(max_length=32)
这是我提供的功能:
def save(self):
if not self.urlhash:
if self.user.profile.user_type == 'Business User':
self.urlhash = 'B' + str(self.user.id) + ('00') + str(self.id)
else:
self.urlhash = 'P' + str(self.user.id) + ('00') + str(self.id)
super(Group1, self).save()
但是str(self.id)
不会有
有人能解释一下为什么会发生这种错误吗
多谢各位
根据@JPG和@sandip给出的解决方案,我最终得到了解决方案
def save(self):
super(Group1, self).save()
if not self.urlhash:
if self.user.profile.user_type == 'Business User':
self.urlhash = 'B' + str(self.user.id) + ('00') + str(self.id)
Group1.objects.filter(pk=self.pk).update(urlhash=self.urlhash)
else:
self.urlhash = 'P' + str(self.user.id) + ('00') + str(self.id)
Group1.objects.filter(pk=self.pk).update(urlhash=self.urlhash)
这对我很有用…谢谢大家为什么
self.id
是无
这是因为Django在对象创建之后,即调用model的save()
方法之后,分配id
值
因此,调用save()
方法,然后尝试执行您的逻辑,如下所示
def save(self):
super(Group1, self).save()
if not self.urlhash:
if self.user.profile.user_type == 'Business User':
self.urlhash = 'B' + str(self.User.id) + ('00') + str(self.id)
<b>self.__class__.objects.filter.(pk=self.pk).update(urlhash=urlhash)</b>
else:
self.urlhash = 'P' + str(self.User.id) + ('00') + str(self.id)
<b>self.__class__.objects.filter.(pk=self.pk).update(urlhash=urlhash)
感谢从他的答案中获得的想法要获得
id
,您需要尝试@JPG提供的答案。但由于在初始步骤中调用了save()
方法,urlhash可能不会更新,因为它没有保存在实例中。要更新urlhash
,可以执行以下操作:
def save(self):
super(Group1, self).save()
if not self.urlhash:
if self.user.profile.user_type == 'Business User':
urlhash = 'B' + str(self.User.id) + ('00') + str(self.id)
Group1.objects.filter(pk=self.pk).update(urlhash=urlhash)
else:
self.urlhash = 'P' + str(self.User.id) + ('00') + str(self.id)
Group1.objects.filter(pk=self.pk).update(urlhash=urlhash)
是的,尝试了此操作…但无论何时创建或更新
Group1
对象,它都不会更新urlhash
。请检查实例中是否有urlhash
值it@NiladryKar现在我在我的答案中发现了这个问题并改正了:)是的,检查一下我更新的问题……我只是把self.\uu class\uu
改为这可能会引起一个错误,因为你应该这样做;d使用filter()
而不是get()
method@JPG谢谢你的建议。我已经编辑了我的答案
def save(self):
super(Group1, self).save()
if not self.urlhash:
if self.user.profile.user_type == 'Business User':
urlhash = 'B' + str(self.User.id) + ('00') + str(self.id)
Group1.objects.filter(pk=self.pk).update(urlhash=urlhash)
else:
self.urlhash = 'P' + str(self.User.id) + ('00') + str(self.id)
Group1.objects.filter(pk=self.pk).update(urlhash=urlhash)