首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django动态表单-动态ChoiceField

django动态表单-动态ChoiceField
EN

Stack Overflow用户
提问于 2014-07-17 00:32:21
回答 2查看 1.2K关注 0票数 0

在django中,如何在每次调用db时创建一个可选的formField来访问db?现在,django加载一次就执行:status = forms.ChoiceField(choices=FormsTools.StatusesToTuples(Status.objects.all())),而不是每次显示表单时都执行。如何使该字段成为动态字段?所以每次显示表单时,可选字段都会有来自db的值?

更新:发布数据:

代码语言:javascript
复制
.
status: u'4'
.
.

在模型中,该字段如下所示:status = models.IntegerField()

视图:

代码语言:javascript
复制
def edit_call(request, call_id):
    c = Call.objects.get(id=call_id)
    if request.POST:
        form = CallForm(request.POST, instance=c)
        print form.errors
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/ViewCalls/')

    else:
        form = CallForm(instance=c)
        args = {}
        args.update(csrf(request))
        args["form"] = form
        args["id"] = call_id

        t = get_template('edit_call.html')
        cont = RequestContext(request, args)
        html = t.render(cont)
        return HttpResponse(html)

表单:简单如下:

代码语言:javascript
复制
class CallForm (forms.ModelForm):

    employee_id = forms.ModelChoiceField(queryset=Employee.objects.all())
    status = forms.ModelChoiceField(queryset=Status.objects.all())
    class Meta():
        model = Call
EN

回答 2

Stack Overflow用户

发布于 2014-07-17 01:16:45

您需要在每次加载表单时调用构造器来更新选项。因此,表单应该是:

代码语言:javascript
复制
class CallForm(forms.ModelForm): 
    ...
    status = forms.ChoiceField()

    def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
                 initial=None, error_class=ErrorList, label_suffix=None,
                 empty_permitted=False):
        super(CallForm, self).__init__(data, files, auto_id, prefix, initial, error_class,
                                       label_suffix, empty_permitted)
        self.fields['status'].choices = FormsTools.StatusesToTuples(Status.objects.all())
票数 2
EN

Stack Overflow用户

发布于 2014-07-17 00:33:46

你看过forms.ModelChoiceField吗?

更新了以下更新的问题的答案:

你现在需要让你的模型和表单相匹配:

你的模型有一个IntegerField,你的表单有一个ModelChoiceField。后者返回pk字符串,而不是整数ID。

既然您使用的是模型表单,为什么不让它为您创建字段呢?

代码语言:javascript
复制
class CallForm(forms.ModelForm):

    class Meta:
        model = Call
        fields = ('employee', 'status')  # assuming these are what the field names are
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24786073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档