Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django使用ModelChoiceField和queryset参数_Python_Django_Django Queryset - Fatal编程技术网

Python 使用Django使用ModelChoiceField和queryset参数

Python 使用Django使用ModelChoiceField和queryset参数,python,django,django-queryset,Python,Django,Django Queryset,我想创建一个简单的html列表 在models.py中,我定义了一个成员模型,该模型包含关于每个用户的大量详细信息。其中一个细节是一年,即2000年、2001年等。在会员登记表中,我需要一个列表,可以从中选择20年前的年份(随着年份的推移而动态变化) 我从中学到,我应该将modelcooicefield与queryset参数一起使用 似乎我需要创建另一个专用于动态列表的模型,但我认为这不正确,因为它实际上不需要在数据库中,因为每次加载表单时都可以计算它 那么我应该在queryset属性中添加什么

我想创建一个简单的html
列表

models.py
中,我定义了一个
成员
模型,该模型包含关于每个
用户的大量详细信息。其中一个细节是一年,即2000年、2001年等。在会员登记表中,我需要一个
列表,可以从中选择20年前的年份(随着年份的推移而动态变化)

我从中学到,我应该将
modelcooicefield
与queryset参数一起使用

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

那么我应该在queryset属性中添加什么呢?理想情况下,我想创建一个简单的函数来获取当前年份,并创建某种类型的数组,即queryset。我对python没有太多经验,所以这可能是一个愚蠢的问题

对丹尼尔·罗斯曼的回应:

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

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

你误解了这个问题的答案,或者我对这个答案的评论。如果选择需要从模型中获取其值,则只能使用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)]