Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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
Python 类内的函数未定义?_Python_Django_Django Models - Fatal编程技术网

Python 类内的函数未定义?

Python 类内的函数未定义?,python,django,django-models,Python,Django,Django Models,我试图检查生成的唯一id在数据库中是否唯一,因为它只有6个字符 class Images(models.Model): uid = models.CharField(max_length=10, default=genid(), editable=False) def genid(): uid = uuid.uuid4().hex[:6] if Images.objects.get(uid=uid).exists(): ui

我试图检查生成的唯一id在数据库中是否唯一,因为它只有6个字符

class Images(models.Model):
    uid = models.CharField(max_length=10, default=genid(), editable=False)
    def genid():
        uid = uuid.uuid4().hex[:6]
        if Images.objects.get(uid=uid).exists():
            uid = uuid.uuid4().hex[:6]
        return uid
但它不起作用。它告诉我genid没有定义,图像没有定义。我怎样才能解决这个问题


谢谢那时,
genid确实还没有定义。此外,您不应该调用该函数,因为它会将函数的结果作为默认值。您应该将其定义为:

class Images(models.Model):
    def genid():
        uid = uuid.uuid4().hex[:6]
        if Images.objects.filter(uid=uid).exists():
            uid = uuid.uuid4().hex[:6]
        return uid
    uid = models.CharField(max_length=10, default=genid, editable=False)
类图像(models.Model):
def genid():
uid=uuid.uuid4().hex[:6]
如果Images.objects.filter(uid=uid).exists():
uid=uuid.uuid4().hex[:6]
返回uid
uid=models.CharField(最大长度=10,默认值=genid,可编辑值=False)
但通常在函数外部定义,例如:

def genid():
    uid = uuid.uuid4().hex[:6]
    while Images.objects.filter(uid=uid).exists():
        uid = uuid.uuid4().hex[:6]
    return uid

class Images(models.Model):
    uid = models.CharField(max_length=10, default=genid, editable=False)
def genid():
uid=uuid.uuid4().hex[:6]
而Images.objects.filter(uid=uid.exists():
uid=uuid.uuid4().hex[:6]
返回uid
类图像(models.Model):
uid=models.CharField(最大长度=10,默认值=genid,可编辑值=False)

您可能应该将
if
替换为
while
循环,因为现在第二次尝试也可能失败。

当时,
genid
确实还没有定义。此外,您不应该调用该函数,因为它会将函数的结果作为默认值。您应该将其定义为:

class Images(models.Model):
    def genid():
        uid = uuid.uuid4().hex[:6]
        if Images.objects.filter(uid=uid).exists():
            uid = uuid.uuid4().hex[:6]
        return uid
    uid = models.CharField(max_length=10, default=genid, editable=False)
类图像(models.Model):
def genid():
uid=uuid.uuid4().hex[:6]
如果Images.objects.filter(uid=uid).exists():
uid=uuid.uuid4().hex[:6]
返回uid
uid=models.CharField(最大长度=10,默认值=genid,可编辑值=False)
但通常在函数外部定义,例如:

def genid():
    uid = uuid.uuid4().hex[:6]
    while Images.objects.filter(uid=uid).exists():
        uid = uuid.uuid4().hex[:6]
    return uid

class Images(models.Model):
    uid = models.CharField(max_length=10, default=genid, editable=False)
def genid():
uid=uuid.uuid4().hex[:6]
而Images.objects.filter(uid=uid.exists():
uid=uuid.uuid4().hex[:6]
返回uid
类图像(models.Model):
uid=models.CharField(最大长度=10,默认值=genid,可编辑值=False)

您可能应该将
if
替换为
while
循环,因为现在第二次尝试也可能失败。

uid
的定义指的是
genid()
,在代码中还没有定义它。
uid
的定义指的是
genid()
,在代码中的该点尚未定义。但我得到一个新错误
图像匹配查询不存在。
@Moswers:您需要使用
.filter(..).exists()
。如果您使用
.get(..).exists()
它确实会引发错误。但我得到一个新错误
图像匹配查询不存在。
@Moswers:您需要使用
.filter(..).exists()
。如果使用
.get(..).exists()
它确实会引发错误。