首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django模型方法中参考场的缺省函数

Django模型方法中参考场的缺省函数
EN

Stack Overflow用户
提问于 2017-02-07 11:30:37
回答 1查看 453关注 0票数 0

有一个具有字段的模型,该字段应该使用固定长度的随机标识符自动填充:

代码语言:javascript
复制
from django.db import models
from django.utils.crypto import get_random_string

def get_random_string_fixed():
    return get_random_string(length=20)

class Post(models.Model):
    identifier = models.CharField(unique=True, default=get_random_string_fixed)

为了不确定生成值确实是唯一的,我希望在保存方法中重新生成它,如果这个值已经存在:

代码语言:javascript
复制
def save(self, *args, **kwargs):
    if not self.pk:
        while Post.objects.filter(identifier=self.identifier).exists():
            self.identifier = get_random_string_fixed()
    super().save(*args, **kwargs)

这个实现的问题是get_random_string_fixed是在save()方法中硬编码的。如果在某个时候我决定为这个字段选择一个不同的默认函数,我将不得不在几个地方更改它,这是一种错误的做法。

是否有一种方法可以引用模型方法中分配给字段的default属性的函数,而不对函数的名称进行硬编码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-07 20:12:28

当然,您可以使用内省API来做到这一点:

代码语言:javascript
复制
Post._meta.get_field("identifier").default

尽管如此,我认为拥有default一点意义都没有。无论如何,您要在save()中重写它,这有点误导,因为它实际上不是默认的。

还请注意,您的算法仍然有失败的情况。对于默认事务隔离级别,它不会阻止两个事务同时写入相同的值。当然,这是极不可能的。

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

https://stackoverflow.com/questions/42088761

复制
相关文章

相似问题

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