我有一个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?
答案 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