Django:模型更新时表单值不更新

时间:2009-09-30 15:14:17

标签: python django django-forms

我正在创建一个使用MultipleChoiceField的表单。此字段的值派生自另一个模型。这种方法工作正常,但是,我注意到(在生产服务器上)当我向相关模型添加新项目(NoticeType)时,表单不会动态更新。我必须重新启动服务器才能在我的MultipleChoiceField上显示新项目。

对NoticeType模型的任何更改(编辑项目或创建新项目)都不会传播到表单。重新启动生产服务器后,将显示更新。

为什么会出现这种情况?表格的相关部分如下。感谢。

from django import forms 
from django.contrib.auth.models import User
from notification.models import NoticeType

class EditUserProfileForm(forms.Form):   
    CHOICES = []

    for notice in NoticeType.objects.all():
        CHOICES.append( (notice.label,notice.display) )

    notifications   = forms.MultipleChoiceField(
                        label="Email Notifications",
                        required=False,
                        choices=( CHOICES ),
                        widget=forms.CheckboxSelectMultiple,)

2 个答案:

答案 0 :(得分:8)

虽然mherren是正确的,您可以通过在__init__方法中定义您的选择来解决此问题,但有一种更简单的方法:使用专门用于获取查询集的ModelMultipleChoiceField和更新动态。

class EditUserProfileForm(forms.Form):
    notifications = forms. ModelMultipleChoiceField(
                    label="Email Notifications",
                    required=False,
                    queryset = NoticeType.objects.all(),
                    widget=forms.CheckboxSelectMultiple)

答案 1 :(得分:6)

我的预感是类定义仅在加载时处理,而不是每个实例化。尝试将CHOICES计算添加到 init 方法,如下所示:

def __init__(self, *args, **kwargs):
    super(self.__class__, self).__init__(*args, **kwargs)
    CHOICES = []
    for notice in NoticeType.objects.all():
        CHOICES.append( (notice.label, notice.display) )
    self.fields['notifications'].choices = CHOICES