我有一个视图,编辑模型Foo的实例。它可以用一个arg(表单post)或三个args(编辑对象的初始请求)调用:
def edit_it(request, key1_id=-1, key2_id=-1):
其中key1_id
和key2_id
标识要编辑的特定实例。在录入时,我会检查是否已从表单帖子或链接中调用
if request.method == 'POST':
key1_id = request.key1_id # first thing that doesn't work
key2_id = request.key2_id # (also doesn't work)
foo = Foo.objects.get(key1=key1_id, key2=key2_id)
form = Foo(request.POST, instance=foo)
...
else:
foo = Foo.objects.get(key1=key1_id, key2=key2_id)
form = Foo(instance=foo)
在我的模板中,我明确地为<input type="hidden" ... >
和key1_id
插入key2_id
。因此,key1_id和key2_id应该在request.POST的某个地方似乎是合理的,但我没有发现它通过代码,文档和谷歌。
或者我完全困惑,我应该这样做吗?我尝试使用"widget=forms.HiddenInput"
在模型中指定键[12] _id字段,但是widget在此处不起作用:key1_id
是主键,key2_id
是ForeignKey,其作业只是通过修改URL中的key1_id
来避免捕获其他人的对象。
结果的html(现在由于建议将args维持到帖子而略微修改)是这样的:
<table>
<form action="/seededit/u=2/sh=14" method="post">
<div style='display:none'>
<input type='hidden' name='csrfmiddlewaretoken'
value='19a559c496e637cdbf3132ce8e147cc4' /></div>
[...]
<tr>
<td><input type="hidden" name="user_id" value="2" />
<input type="hidden" name="shareable_id" value="14" /></td>
<td><input type="submit" value="Submit" name="submit" /></td>
</tr>
</form>
</table>
</p>
答案 0 :(得分:0)
它不是request.key2_id
它是request.POST['key2_id
]`request.POST是一个像字典一样的QueryDict,所以print request.POST会显示一个字典。
话虽这么说,你仍然可以使用/定义那些文件作为HiddenInput,然后使用django的表单验证来确保它们是正确的类型/存在等。在处理表单,请求变量时有很多选项和验证。