Django:唯一的id生成器

时间:2018-06-18 00:55:04

标签: 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'不是模型中的字段。

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

1 个答案:

答案 0 :(得分:3)

由于您作为字段名称字符串传递,因此无法使用filter(field=value)语法。 它与filter('invoice_id'=value)相同,这是无效的语法。 请改用dpack:

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