python - Django post请求返回querydict而不是模型表单的对象ID
问题描述
我有模型
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,而不是包含表单所有字段的查询字典?
解决方案
一些快速而混乱的东西可能会起作用。
data = dict(qd.iterlists())
instance = Medicine.objects.get(id=int(data.get('chosen_medicine')[0]))
但在我看来,如果你只需要一个 id,你甚至不应该发布整个查询集。
推荐阅读
- android - 在 MPAndroidChart 折线图中,有兴趣在图顶部之外显示数据集值
- visual-studio - Visual Studio 模板不复制文件
- java - Java - Pcap4j 只检测主机设备的地址
- angular - 显示错误内容的选项卡
- python - 为什么 python asyncio loop.call_soon 会覆盖数据?
- css - 阻止 clean-css 在 { font-type: 'Crimson Text' } 中将 'Crimson' 更改为 #dc143c
- c# - 正文表达式是否比成员变量的简单返回更有效?
- python - 使用 numexpr 优化 numpy 中的数值运算
- c++ - 进程退出并返回值 3221225477 访问多维向量
- python - Python串行到Arduino