uuid.uuid4() 不以 DJango 形式创建随机 UUID
uuid.uuid4() not creating random UUID in DJango forms
我在 Django 管理中有一个产品创建表单 space。在产品创建表单中,我有一个干净的产品 ID 方法:
forms.py
import UUID
def clean_pk_product_id(self, *args, **kwargs):
pk_product_id = uuid.uuid4()
return pk_product_id
models.py
class dboinv_product(models.Model):
pk_product_id = models.UUIDField(
default = uuid.uuid4(),
primary_key=True,
null=False
)
出于某种原因,这不会生成随机 UUID,它将尝试使用 'pre-determined' ID。我试图创建多个新对象,但都抛出相同的错误,指出主键不是唯一的,并给出相同的 UUID > (3e18d2da4f624649a7cfa310108a1421)
我处理此表单验证的方式有问题吗?我不确定 Django 管理员如何处理这些表单...
更新:我没有在这个表单上调用验证,它是由 django 完成的,因为这个表单只用于管理员 space
在您的模型中,默认设置如下:
default = uuid.uuid4()
这里你有调用 uuid.uuid4
,其中returns一个uuid然后用作默认值。这不是您想要的。相反,您需要将默认值设置为函数本身,因为它可以接受一个可调用对象:
class dboinv_product(models.Model):
pk_product_id = models.UUIDField(
default = uuid.uuid4, # Remove the brackets
primary_key=True,
null=False
)
接下来关于您的功能clean_pk_product_id
,我相信它甚至从未使用过。我不认为您允许用户输入 pk_product_id
,这意味着您的表单可能没有字段 pk_product_id
因此您声明的方法从未被调用,只是字段默认值被使用了。
Note: Class names should ideally be in PascalCase
not snake_case
, so dboinv_product
is not a great name. Have a look at
PEP 8 -- Style Guide for Python
Code
我在 Django 管理中有一个产品创建表单 space。在产品创建表单中,我有一个干净的产品 ID 方法:
forms.py
import UUID
def clean_pk_product_id(self, *args, **kwargs):
pk_product_id = uuid.uuid4()
return pk_product_id
models.py
class dboinv_product(models.Model):
pk_product_id = models.UUIDField(
default = uuid.uuid4(),
primary_key=True,
null=False
)
出于某种原因,这不会生成随机 UUID,它将尝试使用 'pre-determined' ID。我试图创建多个新对象,但都抛出相同的错误,指出主键不是唯一的,并给出相同的 UUID > (3e18d2da4f624649a7cfa310108a1421)
我处理此表单验证的方式有问题吗?我不确定 Django 管理员如何处理这些表单...
更新:我没有在这个表单上调用验证,它是由 django 完成的,因为这个表单只用于管理员 space
在您的模型中,默认设置如下:
default = uuid.uuid4()
这里你有调用 uuid.uuid4
,其中returns一个uuid然后用作默认值。这不是您想要的。相反,您需要将默认值设置为函数本身,因为它可以接受一个可调用对象:
class dboinv_product(models.Model):
pk_product_id = models.UUIDField(
default = uuid.uuid4, # Remove the brackets
primary_key=True,
null=False
)
接下来关于您的功能clean_pk_product_id
,我相信它甚至从未使用过。我不认为您允许用户输入 pk_product_id
,这意味着您的表单可能没有字段 pk_product_id
因此您声明的方法从未被调用,只是字段默认值被使用了。
Note: Class names should ideally be in
PascalCase
notsnake_case
, sodboinv_product
is not a great name. Have a look at PEP 8 -- Style Guide for Python Code