Django:唯一 ID 生成器

标签 django django-models

我有一个 pres_save 功能,可以为模型中的字段创建唯一的 ID。我无法检查该字段是否唯一:

def pre_save_create_invoice_id(sender, instance, *args, **kwargs):
    if not instance.invoice_id:
        instance.invoice_id = unique_id_generator('invoice_id',instance)

pre_save.connect(pre_save_create_invoice_id, sender=Invoice)

def unique_id_generator(field,instance):
    new_id = random_string_generator()
    Klass = instance.__class__
    qs_exists = Klass.objects.filter(field=new_id).exists()
    if qs_exists:
        return unique_slug_generator(instance)
    return new_id

当我运行代码时,出现“无法将关键字“字段”解析为字段”的错误。选项有:...invoice_id...'

基本上,它在这一行出错:qs_exists = Klass.objects.filter(field=new_id).exists() 表示“field”不是模型中的字段。

为什么使用“字段”一词而不是字段的值,例如发票 ID?

最佳答案

由于您要作为字段名称字符串传递,因此无法使用 filter(field=value) 语法。 它与 filter('invoice_id'=value) 相同,这不是有效的语法。 使用解压的字典代替:

qs_exists = Klass.objects.filter(**{field: new_id}).exists()
if qs_exists:
    return unique_slug_generator(instance)
return new_id

关于Django:唯一 ID 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50901575/

相关文章:

python - 将Django Python应用程序放入Docker容器后获得404错误消息

python - 从 Django 中的模型搜索

django - 如何通过Django Class模型自动更新日期字段

python - 1 个 django 应用程序中约有 20 个模型

django - 如何将带有 OneToOneField 的模型添加到某些 ForeignKey 自定义用户模型中的每一个

python - pip install MySQL-python 在 Linux 中失败

python - 为什么我的来自 django 电子邮件的 html 链接不可点击?

django - 如何在 forms.ModelChoiceField 上定义属性?

python - 如何在 Django 中将权限添加到模型并使用 shell 对其进行测试

python - Django - JSON 序列化错误