我正在尝试使用自定义UpdateView在Python / Django中工作。我相信我写的代码大多是正确的,因为当我点击相关的下拉列表时,它似乎在URL中返回正确的主键ID。问题是我在更新模式下没有在屏幕上看到与此记录相关的任何数据。屏幕显示在编辑模式下,但没有数据。我怀疑问题可能是html表单中的django模板?但是,我使用了表单并使用了{{form}},它也返回了一个空白表单。我整个下午都玩过这个,我猜对了。以下是我的观点:
def updating_document(request, pk):
doc = get_object_or_404(Doc, pk=pk)
form = Update_Doc_Form(request.user, request.POST)
if request.method == 'GET':
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('App:main_procedure_menu'))
else:
print("Form is invalid!")
return render(request,'Doc/update_doc.html',{'form':form })
我也有一个相关的表格......
Form.py
class Update_Doc_Form(forms.ModelForm):
class Meta:
model = Doc
exclude = ['user']
doc_name = forms.CharField(widget=forms.TextInput)
description = forms.CharField(required=True,widget=forms.Textarea)
team = forms.CharField(widget=forms.Select)
document = forms.CharField(required=True,widget=forms.Textarea)
def __init__(self, *args, **kwargs):
super(Update_Doc_Form, self).__init__(*args, **kwargs)
self.fields['doc_name'].widget.attrs['class'] = 'name'
self.fields['description'].widget.attrs['class'] = 'description'
self.fields['team'].widget.attrs['class'] = 'choices'
self.fields['team'].empty_label = ''
我是新手,但我确实想使用自定义UpdateView,以便我可以更改某些字段并传递用户信息。我觉得代码很接近,只需要弄清楚为什么它实际上并没有用数据填充表单。在此先感谢您的帮助!
答案 0 :(得分:0)
一天有什么不同。今天早上在SO上找到答案。不确定如何归功于此人或发行号码....
答案是将以下代码行添加到我的表单中:
user = kwargs.pop('object_user')
我还需要将以下功能添加到我的视图中:
def get_form_kwargs(self):
kwargs = super(ViewName,self).get_form_kwargs()
kwargs.update({'object_user':self.request.user})
return kwargs
这个问题最初由Ivan ViraByan于2013年回答。谢谢伊万!
我最终选择了一个基于标准类的UpdateView,并在我能够弄清楚如何使用基于类的视图(UpdateView)并在将用户信息传递给表格基于Ivan ViraByan在2013年的回答。
上面的代码允许您获取用户但不将其传递给ModelForm,这样您就不会收到意外的用户错误。