首页 > 解决方案 > Django:id字段的值即将到来 None

问题描述

我想为我的 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)即将到来 无。

谁能解释一下为什么会发生这个错误?

谢谢

根据@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)

这对我有用...谢谢大家

标签: djangodjango-models

解决方案


为什么self.idNone

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

因此,调用该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从他的回答中得到的想法


推荐阅读