gpt4 book ai didi

Django:id 字段的值即将到来 None

转载 作者:行者123 更新时间:2023-12-05 08:52:58 24 4
gpt4 key购买 nike

我想为我的 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=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) 是 None。

谁能解释一下为什么会出现这个错误?

谢谢

根据@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.idNone

这是因为 Django 在对象创建之后分配 id/pk 值,也就是调用模型的 save() 方法。

因此,调用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)

更新
我有一点认为在调用 save() 方法后应该再次更新实例。所以我使用了语句

self.__class__.objects.filter.(pk=self.pk).update(urlhash=urlhash)

感谢@sanip因为从他的回答中得到的想法

关于Django:id 字段的值即将到来 None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54939464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com