我在Django管理空间中有一个产品创建表单。在产品创建表单中,我有一个干净的产品ID方法:
forms.py
import UUID
def clean_pk_product_id(self, *args, **kwargs):
pk_product_id = uuid.uuid4()
return pk_product_idmodels.py
class dboinv_product(models.Model):
pk_product_id = models.UUIDField(
default = uuid.uuid4(),
primary_key=True,
null=False
)由于某种原因,这不会产生随机的UUID,它将尝试使用“预先确定的”ID。我尝试创建多个新对象,并且都抛出相同的错误,说明主键不是唯一的,并给出相同的UUID >(3e18d2da4f624649a7cfa3108a1421)
我处理这个表格的验证方式有什么问题吗?我不确定Django管理如何处理这些表单..。
更新:我不对此表单调用验证,它由django完成,因为此表单仅用于管理空间。
发布于 2021-06-22 15:33:47
在您的模型中,您的默认设置如下:
default = uuid.uuid4()在这里,您调用了uuid.uuid4,它返回一个uuid,该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:理想情况下类名应该在
PascalCase而不是snake_case中,因此dboinv_product不是一个很好的名称。看看PEP 8 -- Style Guide for Python Code
https://stackoverflow.com/questions/68086259
复制相似问题