Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:id字段的值为零_Django_Django Models - Fatal编程技术网

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

我想为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)

这对我很有用…谢谢大家

为什么
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)