【发布时间】:2020-08-07 21:51:08
【问题描述】:
我有模型
class CollectionForm(forms.ModelForm):
Medicine_Name = forms.ModelChoiceField(queryset=Medicine.objects.all())
class Meta:
model = Medicine
fields = ['Number_Of_Boxes', 'Last_Collected']
def __init__(self, user = None, *args, **kwargs):
super().__init__(*args, **kwargs)
if user:
self.fields['Medicine_Name'].queryset=Medicine.objects.filter(User_Associated=user)
以及处理表单的视图:
def update(request, *args, **kwargs):
if request.method == 'POST':
qd = request.POST['chosen_medicine']
instance = Medicine.objects.get(id=qd)
form = CollectionForm(request.POST, instance=instance)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
else:
form = CollectionForm()
context = {'form': form,
'meds': Medicine.objects.filter(User_Associated=request.user),
}
return render(request, 'tracker/medicine_collection.html', context )
表格模板在这里:
<form method="POST" action = ''>
{% csrf_token %}
<label for="Medicine_Name">Medicine Name</label>
<select class = "form-control" id = "Medicine_Name" name = "chosen_medicine">
{% for med in meds %}
<option value = '{{med.auto_id}}'>{{ med.Medicine_Name }}</option>
{% endfor %}
</select>
{{form.Number_Of_Boxes }}
{{form.Last_Collected }}
<button class="btn btn-outline-info" type="submit">Create</button>
</form>
我正在尝试获取用户从下拉列表中选择的 Medicine_Name 的 ID。为此,我认为我有一个 POST 请求来获取 id。但是,在提交我的表单时出现错误:
Field 'id' expected a number but got <QueryDict: {'csrfmiddlewaretoken': ['rrkPEpuZqxWQ9TS4lLMRDwAQ7xZAOUVZl8iHLVfZJ8gEfKundDMvDh9oWp42l1Jf'], 'chosen_medicine': ['1'], 'Number_Of_Boxes': ['3'], 'Last_Collected': ['03/16/2020']}>.
如何确保 POST 请求实际获取 ID,而不是包含表单所有字段的查询字典?
【问题讨论】:
-
request.POST被user参数捕获。 -
那么问题出在我的表单内的 init 方法中吗?我该如何补救?
标签: python django django-forms django-templates