【发布时间】:2020-05-22 11:39:31
【问题描述】:
我正在为一个客户端构建一个 Django 项目,该项目要求我不使用简单的 form.save() 方法来更新模型字段。
基本上是这样的:
我有这个模型,CharField 有unique=True:
# models.py
class Course(models.Model):
name = models.CharField(max_length=20, unique=True)
other_field = models.CharField(max_length=10, null=True)
def __str__(self):
return self.name
该模型在forms.py 中有一个表单:
# forms.py
class CourseCreateForm(forms.ModelForm):
class Meta:
model = Course
fields = ['name', 'other_field']
我需要通过函数视图来更新这个字段(在这种情况下不能基于类。当然,字面上可以,但是对于我学生的项目要求不能),我不能使用简单的form.save()函数,所以我需要像普通形式一样做完整的更新代码:
# views.py
def course_update(request, pk):
course = Course.objects.get(pk=pk)
course_queryset = Course.objects.filter(pk=pk)
if request.method == "POST":
form = CourseCreateForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
other_field = form.cleaned_data['other_field']
course_queryset.update(name=name, other_field=other_field) # <-- Where I try to update
else:
print(form.errors)
return HttpResponseRedirect('../')
else:
form = CourseCreateForm(instance=course)
context = {
"form": form,
}
return render(request, 'base/course_update.html', context)
当我尝试仅更新 other_field 时,没有进行更改,并且在表单错误中我收到错误“具有此名称的课程已经存在。”,所以我不能只更改 other_field 数据也不必更改 name 字段,因为 name 字段是唯一的。
如何在不更改唯一值的情况下更新具有 unique=True 的模型实例字段?
希望这是有道理的!
谢谢。
更新:
还想补充一点,当 unique=True 关闭时,它可以正常工作。我只是好奇,当 unique=True 并且您从模型表单中添加相同的变量时,您如何正常更新字段。
【问题讨论】:
-
"我不能使用简单的 form.save() 函数" 为什么不呢?
-
这是我正在帮助的一个学生项目。基本上,我必须向她展示保存模型实例时的样子,因为她必须通过 Model.objects.raw('') 函数将其转换为原始 sql 查询。绝对是一个独特的情况哈哈。
标签: python django django-models django-forms