首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uuid.uuid4()没有在DJango表单中创建随机UUID

uuid.uuid4()没有在DJango表单中创建随机UUID
EN

Stack Overflow用户
提问于 2021-06-22 15:15:48
回答 1查看 951关注 0票数 0

我在Django管理空间中有一个产品创建表单。在产品创建表单中,我有一个干净的产品ID方法:

forms.py

代码语言:javascript
复制
import UUID
    def clean_pk_product_id(self, *args, **kwargs):
        pk_product_id = uuid.uuid4()
        return pk_product_id

models.py

代码语言:javascript
复制
class dboinv_product(models.Model):
    pk_product_id = models.UUIDField(
        default = uuid.uuid4(),
        primary_key=True,
        null=False
    )

由于某种原因,这不会产生随机的UUID,它将尝试使用“预先确定的”ID。我尝试创建多个新对象,并且都抛出相同的错误,说明主键不是唯一的,并给出相同的UUID >(3e18d2da4f624649a7cfa3108a1421)

我处理这个表格的验证方式有什么问题吗?我不确定Django管理如何处理这些表单..。

更新:我不对此表单调用验证,它由django完成,因为此表单仅用于管理空间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-22 15:33:47

在您的模型中,您的默认设置如下:

代码语言:javascript
复制
default = uuid.uuid4()

在这里,您调用了uuid.uuid4,它返回一个uuid,该uuid随后被用作默认值。这是,而不是你想要的。相反,您需要将默认值设置为函数本身,因为它可以接受一个可调用的:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68086259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档