重新填充 Django ChoiceField 而不重新启动服务器

发布于 2024-12-11 16:53:26 字数 306 浏览 0 评论 0原文

我有一个简单的表单,用户可以从选择字段中选择一个部门。

这是我的表单:

class NewDealForm1(forms.Form):
        department = forms.ChoiceField(choices = map(lambda x:('%s'% x.id, '%s' % x.title),Department.objects.all()))

每当我从管理员添加新部门时,除非重新启动服务器,否则我的选择字段不会显示新部门。

如何在不重新启动服务器的情况下显示所有部门?

I have a simple form where users can select a department from a choicefield.

This is my form :

class NewDealForm1(forms.Form):
        department = forms.ChoiceField(choices = map(lambda x:('%s'% x.id, '%s' % x.title),Department.objects.all()))

Whenever I add a new department from admin, my choicefield doesn't display new department unless I restart my server.

How can i display all departments without restarting the server ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光与爱终年不遇 2024-12-18 16:53:26

您应该尝试使用直接接受查询集的 forms.ModelChoiceField,而不是使用 forms.ChoiceField

文档: https://docs.djangoproject.com/en/dev/ ref/forms/fields/#modelchoicefield

示例

class NewDealForm1(forms.Form):
    department = forms.ModelChoiceField(queryset=Department.objects.all()))

Instead of using a forms.ChoiceField you should try a forms.ModelChoiceField which takes a queryset directly.

Docs: https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield

Example

class NewDealForm1(forms.Form):
    department = forms.ModelChoiceField(queryset=Department.objects.all()))
铃予 2024-12-18 16:53:26

沃尔夫的回答是正确的。

但要直接回答您的问题(“在不重新启动服务器的情况下重新填充 Django ChoiceField”),您需要在表单构造函数中设置选择。以下是动态信用卡年份选择的示例。

class NewDealForm1(forms.Form):
    year = forms.ChoiceField(choices=[]))

    def __init__(self, *args, **kwargs):
        super(NewDealForm, self).__init__(*args, **kwargs)
        year = datetime.date.today().year
        self.fields['year'].choices = [(x, x) for x in range(year, year+10)]

Wolph's answer is correct.

But to answer your question directly ("Repopulating Django ChoiceField Without Restarting Server"), you'd need to set the choices in your form constructor. Here's an example for a dynamic credit card year choice.

class NewDealForm1(forms.Form):
    year = forms.ChoiceField(choices=[]))

    def __init__(self, *args, **kwargs):
        super(NewDealForm, self).__init__(*args, **kwargs)
        year = datetime.date.today().year
        self.fields['year'].choices = [(x, x) for x in range(year, year+10)]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文