[英]Django form fields do not get populated by POST data
我有一個帶有自定義構造函數的模型表單。 它檢查是否需要文件,如果為false,則刪除文件字段。 它還有兩個隱藏字段,我在視圖中對其進行了初始化。 表單類如下:
class SubmitTask(forms.ModelForm):
task = forms.ModelChoiceField(queryset=Task.objects.all(), widget=forms.HiddenInput())
student = forms.ModelChoiceField(queryset=UserProfile.objects.all(), widget=forms.HiddenInput())
def __init__(self, file_required=False, *args, **kwargs):
super(SubmitTask, self).__init__(*args, **kwargs)
if file_required is True:
file = forms.FileField(
label='Select a file',
help_text='max: 2.5 MB'
)
else:
del self.fields['file']
class Meta:
model = Submission
exclude = ('date_submitted',)
我的問題是在初始化表單時會填充隱藏字段(我已經確認通過查看HTML代碼確實已初始化了其值)。 但是,在POST請求期間不會填充隱藏字段的值。 我已在POST請求期間確認表單確實已綁定,並在Firebug上確認POST也包含task
和student
值。 這是我的views.py
涉及的方法
def view_task(request, id):
task = Task.objects.get(pk=id)
profile = request.user.get_profile()
data = {}
data['classroom'] = task.get_classroom()
data['description'] = task.get_description()
teacher_classrooms = Classroom.objects.filter(teacher=profile)
teacher_tasks = Task.objects.filter(classroom__in=teacher_classrooms)
if not submission and task not in teacher_tasks:
form = SubmitTask(file_required=task.file_required, initial={'task':task.pk, 'student':profile.pk})
data['form'] = form
if request.method == 'POST':
form = SubmitTask(request.POST, request.FILES)
if form.is_valid():
form.save()
return render_to_response('classrooms/view_task.html',
data, context_instance=RequestContext(request))
您的檢視功能對我而言似乎不正確:
提交變量來自哪里,初始化發布的表單時會缺少file_required參數,並且表單處理可能應重新組織為以下形式:
if request.method == 'POST':
form = SubmitTask(task.file_required, request.POST, request.FILES)
...
else:
form = SubmitTask(task.file_required, ...)
data['form'] = form
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.