表单中的隐藏数据,但主键或外键

时间:2011-10-18 13:16:20

标签: django django-models django-forms

我有一个视图,编辑模型Foo的实例。它可以用一个arg(表单post)或三个args(编辑对象的初始请求)调用:

def edit_it(request, key1_id=-1, key2_id=-1):

其中key1_idkey2_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>

1 个答案:

答案 0 :(得分:0)

它不是request.key2_id它是request.POST['key2_id]`request.POST是一个像字典一样的QueryDict,所以print request.POST会显示一个字典。

话虽这么说,你仍然可以使用/定义那些文件作为HiddenInput,然后使用django的表单验证来确保它们是正确的类型/存在等。在处理表单,请求变量时有很多选项和验证。