使用Django使用ModelChoiceField和queryset参数

时间:2013-09-11 12:34:50

标签: python django django-queryset

我想创建一个简单的html <select>列表。

models.py中,我定义了一个Member模型,其中包含有关每个User的大量详细信息。一个细节是一年,即2000年,2001年等。在会员注册表格中,我想要一个可以选择年份的<select>列表,可以追溯到20年(随着年份的增长而动态变化)。

我从this post了解到我应该将ModelChoiceField与查询集参数一起使用。

似乎我需要创建另一个专用于动态列表的模型,但我不认为这是正确的,因为它确实不需要在数据库中,因为它可以在每次计算时计算表单已加载。

那么我应该在queryset属性中添加什么?理想情况下,我想创建一个简单的函数来获取当前年份创建的某种类型的数组,即查询集。我不熟悉python,所以这可能是一个愚蠢的问题。

对Daniel Roseman的回应:

是的,这更有意义。谢谢!但是,我确实必须将日期时间行修改为:

import datetime
year = datetime.date.today().year

1 个答案:

答案 0 :(得分:2)

你误解了这个问题的答案,或者我对这个答案的评论。如果选项需要从模型中获取其值,您只能使用ModelChoiceField - 我的评论只是指出无论表单本身都可以这样做基于模型。但在你的情况下,选择与任何模型无关,因此ModelChoiceField是错误的选择。

标准的ChoiceField就是这样的方式:

class MemberRegistrationForm(forms.ModelForm):
    year = forms.ChoiceField(choices=[])

    def __init__(self, *args, **kwargs):
        super(MemberRegistrationForm, self).__init__(*args, **kwargs)
        year = datetime.datetime.now().year
        self.fields['year'].choices = [(i, i) for i in range(year-20, year+1)]