2011-08-25 53 views
1

我有一个表格(由形式工厂产生的)数据绑定到Django的形式ChoiceField的选择,以适应特殊字段呈现

def MyFormGenerator(data): 
    CHOICES = <created_using_data_value> 
    class MyForm(form.Form): 
     myfield = forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect) 
    return MyForm 

我需要做的是一些Python变量绑定到每一种选择,这样什么模板可以在渲染时使用它们(每个选择都将在div中进行布置,并提供关于该选项的详细信息)。

我可以想出2种方法来做到这一点。 (为了灵活性,首选#1) 1)给模板一个单独的列表,列出应该显示哪些字段(包括数据),并让模板抓取并呈现每个字段,因为它需要它们。 2)将数据绑定到该字段,以便模板在迭代时可以抓取和使用它。

我可以差不多做#1(在模板中手动创建输入字段),但我无法弄清楚如何通过名称使用变量调出字段选项,因为很难知道该做什么当_some_field_是模板变量时不起作用。

现在我从字面上重新创建模板中的SCRATCH字段(重新创建选择值等),但这远非理想。

+0

你能澄清你通过字段的数据是什么意思? [标签](https://docs.djangoproject.com/en/1.3/topics/forms/#customizing-the-form-template)?模型上的[help_text](https://docs.djangoproject.com/en/1.3/ref/models/fields/#help-text)?或者从上一页表单中的东西?你可以发布你当前的表单或模拟你想要的吗? –

+0

对不起,我有一种错误的想法,实际上我需要选择每个选项(单选按钮)的数据。如果选择运输方式(地面,usps等),我需要将一些数据附加到模板可以使用的每个选项。数据将包含一个值的字典,例如预计到达日期,成本,说明等。 – DarwinSurvivor

+0

为了清晰起见而重写了问题 – DarwinSurvivor

回答

0

查看窗体的Django's MultipleModelChoiceField

它允许您使用另一个模型的查询集作为您的choice_fields。如果你的选择会有很多关于他们的数据,无论如何他们可能会更好地拥有自己的模型。 这将工作,假设有某种方法来查询您想要显示的结果,即使您为其分配了一个整数字段给它们。最坏的情况下,你只是有一些巨大的查询(代码长度)与许多排除,过滤器等

field1 = forms.MultipleModelChoiceField(queryset=MyModel.objects.filter(method="UPS"), empty_label="(None)") 

它使用默认的selectMultiple小部件,但它可以与kwarg覆盖。

+0

除了选项不是特定于一个表格之外,这将起作用。该网站使用插件系统(注册模块用于应用程序注册类),并且您从任何一个插件提供的各种选项中选择1个选项。 这是一个航运的选择,并有多种运输模块(统一费率,加拿大邮政,usps等),每个人有不同的选择(10天统一费率,次日统一费率,加拿大邮政加急等) 。用户需要从所有可用的选项中选择一个选项。 – DarwinSurvivor

0

我发现这样做的最简单方法是将数据附加到视图中而不是选择字段本身。

例如,如果您有一个与您的选择长度相同的列表choices_data,并且希望将每条数据绑定到相应的选项,则可以执行下列操作。

def my_view(request): 
    form = MyForm() 
    myfield_choices = zip(form['myfield'], choices_data) 
    ... 

然后你可以通过在你的模板的选择这样的循环:

{% for choice, data in myfield_choices %} 
    ... 
{% endfor %}