Python 类内的函数未定义?
我试图检查生成的唯一id在数据库中是否唯一,因为它只有6个字符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
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()
它确实会引发错误。