我的位置模型有一个名为名称的唯一字段。通过LocationForm我得到用户输入并尝试将其插入数据库或获取axisting对象。但是如果用户输入现有名称,则lf.is_valid()变为False,并且我从未进入get_or_create命令。知道我怎么能通过这个吗?
lf = LocationForm(request.POST or None)
if lf.is_valid():
location_instance, created = Location.objects.get_or_create(**lf.cleaned_data)
谢谢,
答案 0 :(得分:0)
如果您正在使用ModelForm
,那么您可以尝试覆盖_get_validation_exclusions
方法。
class LocationForm():
def _get_validation_exclusions(self):
exclude = super(LocationForm, self)._get_validation_exclusions()
exclude.append(self.fields['name'])
return exclude
让我知道这是怎么回事......
答案 1 :(得分:0)
感谢您的想法。
我在Django文档中找到了有用的.is_valid描述。 Django Validating Objects。
显然 .is_valid 也会针对 Model.validate_unique()进行检查。
这是我最终做的事情:
if lf.is_valid():
location_instance = lf.save()
return render (...)
else:
location_instance, created = Location.objects.get_or_create(**lf.cleaned_data)
error_msg = lf.errors["__all__"]
return render(...)