Django ModelForm中ModelChoiceField的当前日期动态查询集
我读过很多类似的问题,但没有人澄清它是在我们第一次运行服务器时启动的,还是每次在浏览器中刷新页面时启动的 我有这样一个模型:Django ModelForm中ModelChoiceField的当前日期动态查询集,django,modelform,Django,Modelform,我读过很多类似的问题,但没有人澄清它是在我们第一次运行服务器时启动的,还是每次在浏览器中刷新页面时启动的 我有这样一个模型: class TestForm(ModelForm): field1 = ModelChoiceField(queryset=Model.objects.filter(datetime=datetime.today())) 如果我昨天运行了服务器,今天刷新了页面,我仍然有昨天日期时间的对象。您的代码将在服务器启动时运行一次。如果希望在每次页面刷新时检查日期,可以传
class TestForm(ModelForm):
field1 = ModelChoiceField(queryset=Model.objects.filter(datetime=datetime.today()))
如果我昨天运行了服务器,今天刷新了页面,我仍然有昨天日期时间的对象。您的代码将在服务器启动时运行一次。如果希望在每次页面刷新时检查日期,可以传递
datetime.today
函数,而不是值:
class TestForm(ModelForm):
field1 = ModelChoiceField(queryset=Model.objects.filter(datetime=datetime.today))
问题在于,当服务器第一次加载时,查询集会被评估一次 解决方案是在表单的
\uuuu init\uuuu
方法中设置查询集,以便每次实例化表单时都对查询集进行求值
class TestForm(ModelForm):
# Use the empty qs .none() here, we override it in __init__ anyway
field1 = ModelChoiceField(queryset=Model.objects.none())
def __init__(self, *args, **kwargs):
super(TestForm, self).__init__(*args, **kwargs)
self.fields['field1'].queryset = Model.objects.filter(datetime=datetime.today())
可以在查询级别获取当前时间:
from django.db.models.functions import Now
Model.objects.filter(datetime=Now())
Now()
将在查询执行时进行计算(而不是在Python代码中执行Now()
时)。但是,请注意,Now()
报告数据库服务器已知的时间。在Django 1.7中不推荐将可调用项传递给queryset参数的支持,在1.9()中删除了该支持。这看起来不错。但是最后一行可能是:self.fields['field1'].queryset=Model.objects.filter(datetime=datetime.today())?