Django ModelChoiceField未使用新数据更新

Django ModelChoiceField未使用新数据更新,django,django-forms,Django,Django Forms,使用Django 1.7,我有一个modelcooicefield,当基础数据更新时,它不会得到更新。要显示新的数据行,我需要重新启动web服务器 Django表单、字段、视图: class JobsModelChoiceField(forms.ModelChoiceField): def __init__(self, *args, **kwargs): super(JobsModelChoiceField, self).__init__(*args, **kwargs

使用Django 1.7,我有一个
modelcooicefield
,当基础数据更新时,它不会得到更新。要显示新的数据行,我需要重新启动web服务器

Django表单、字段、视图:

class JobsModelChoiceField(forms.ModelChoiceField):

    def __init__(self, *args, **kwargs):
        super(JobsModelChoiceField, self).__init__(*args, **kwargs)
        groups = groupby(sorted(kwargs['queryset'], key=attrgetter('company')), attrgetter('company'))
        self.choices = [(company, [(t.id, self.label_from_instance(t)) for t in title])
                        for company, title in groups]

    def label_from_instance(self, job):
        return u'{} {}'.format(job.id, job.title)

class NewApplicationForm(forms.Form):
    id = JobsModelChoiceField(queryset=Job.objects.all(),
                                widget=forms.Select(attrs={'class':'chosen-select'}))
    first_name = forms.CharField(label='First Name')
    last_name = forms.CharField(label='Last Name')
    email = forms.EmailField(label='Email')
    phone_number = forms.CharField(label='Phone Number', max_length=42, required=False)
    resume = forms.FileField()

    def save(self):
        # save data

class NewApplicationView(SuccessMessageMixin, FormView):

    template_name = 'applicants/new_application.html'
    form_class = NewApplicationForm
    success_url = reverse_lazy('applicants:add')
    success_message = "Job Application was created successfully"

    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
        form.save()
        return super(NewApplicationView, self).form_valid(form)

我遇到的问题的一个例子是,如果我在jobs表中添加新行,那么新行在重新启动web服务器之前不会显示在form choice字段中。

这是因为表单字段是静态填充的,而不是动态填充的(即不是每次实例化表单时)。您应该在form
\uuu init\uu
方法中指定form queryset,如下所示:

class NewApplicationForm(forms.Form):
    id = JobsModelChoiceField(queryset=Job.objects.none(), ...)

...


    def __init__(self, *args, **kwargs):
        super(NewApplicationForm, self).__init__(*args, **kwargs)
        self.fields['id'].queryset = Job.objects.all()

我很想知道为什么这个答案被否决而没有发表评论…:-?这是正确的答案,这是我的工作,我投赞成票,谢谢!