我有一个 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/