我为 add
和 edit
表单创建了一个简单的 Django 表单。
我的问题出在我使用 ModelChoiceField 的人员字段中。
在编辑表单中,除了该字段 ModelChoiceField
之外,所有值都解析正确。
在编辑表单中,该字段为空并且不保留值,知道为什么吗?
def edit_work(request, pk):
instance = get_object_or_404(work, id=pk)
form = workForm(request.POST or None,instance=instance)
if form.is_valid():
note = form.save(commit=False)
note.save()
return HttpResponseRedirect('/work/success/')
return render(request,'edit_work.html', {'form': form})
def add_work(request):
if request.method == "POST":
form = workForm(request.POST)
if form.is_valid():
note = form.save(commit=False)
note.save()
return render(request, "succes/erga_success.html")
else:
form = workForm()
return render(request, 'add_work.html',{'form':form})
表单.py
class workForm(forms.ModelForm):
peaople=forms.ModelChoiceField(queryset=User.objects.all(),required=False, error_messages={
'invalid': _("---")})
class Meta:
model = work
fields = (__all__")
html 页面:
<form enctype="multipart/form-data" method="POST" action="">{% csrf_token %}
{{form.peaople}}
.........
<input type="submit" value="create">
</form>
最佳答案
该值不会被保留,因为您没有将其保存在任何地方,也没有分配它。
- 将值保存在某处。
# views.py
# in both view functions
if form.is_valid():
note = form.save(commit=False)
note.save()
somemodel.people = form.cleaned_data.get("people")
somemodel.save()
- 使用保存的值初始化表单
def edit_work(request, pk):
instance = get_object_or_404(work, id=pk)
form = workForm(request.POST or None,instance=instance, initial={'people': somemodel.people})
if form.is_valid():
note = form.save(commit=False)
note.save()
somemodel.people = form.cleaned_data.get("people")
somemodel.save()
return HttpResponseRedirect('/work/success/')
return render(request,'edit_work.html', {'form': form})
关于python - django 编辑表单不保留值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734083/