2010-07-29 80 views
0

我有一个系统,它保留了大量的“记录”,并需要集成一个组件,它将生成任何选定记录的报告。如何在View中创建/访问Django中的动态表单字段?

对于用户来说,它看起来像这样:

  1. 点击“创建报告”
  2. 选择记录要包括在报告中。
  3. 点击“提交”,显示报告。

对我来说,我认为:

  1. 加载的所有记录。
  2. 创建,其通过从第1部分遍历所有记录,并使用像代码产生 “BooleanField” 一个ReportForm:self.fields [ 'cid_' + STR(record.id)] = BooleanField()
  3. 返回HTML,期待它回来。
  4. 对以'cid_'开头的所有字段进行迭代,并创建要包含在报告中的记录ID列表。
  5. 将数字传递给报告生成器。

但是从视图内部,我无法访问表单数据,这是我能想象得到的唯一方式。由于我不知道哪些记录ID将可用(因为有些可能已被删除等),我需要像这样访问它:

{{form.fields ['cid _'+ str(record.id) ']}}

但显然这是非法的。

有没有人有一些建议?

+0

为了确保我明白了:所以您想从要包含在报告中的记录列表中进行选择,但不能简单地通过这些记录进行查询,因为在您加载页面的时间内可能会删除一些记录等等到何时开始报告? 您可以轻松创建一个简单的表单(例如复选框)列出所有记录..如果您可以准确地告诉我您想要的内容,我可以帮助您多一点。 – Bartek 2010-07-29 14:15:29

+0

这正是我想要做的 - 创建一个将所有记录列为复选框的表单。但我不能只做“form.as_p”,因为我有特定的格式,所以我不知道我可以访问哪些字段。 – TigerTrussell 2010-07-29 15:38:53

回答

1

如果我正确理解你的问题,你的答案在于使用正确的Django表单小部件。我会给你一个例子。比方说,你有一个Django模型: -

class Record(models.Model): 
    name = models.CharField() 

比方说,你为你的需要创建一个自定义形式: -

class MyCustomForm(forms.Form): 
    records= forms.ModelMultipleChoiceField(queryset=Record.objects.all, widget=forms.CheckboxSelectMultiple) 

比方说,你有以下几种观点: -

def myview(request): 
    if request.method == 'POST': 
     form = MyCustomForm(data=request.POST) 
     if form.is_valid(): 
      #do what you want with your data 
      print form.cleaned_data['records'] 
      #do what you want with your data 
    else: 
     form = MyCustomForm() 
    return render_to_response('mytemplate.html', {'form': form}, context_instance=RequestContext(request)) 

您的mytemplate.html可能看起来像这样: -

<div> 
    {{ form.records.label_tag }} 
    {{ form.records }} 
</div> 
相关问题