【问题标题】:Django ModelChoiceField, validation for dynamic querysetDjango ModelChoiceField,动态查询集的验证
【发布时间】:2017-11-01 12:59:39
【问题描述】:

我现在有这个表格:

class PersonForm(forms.Form):                                                                                           
    article = forms.CharField(required=False)
    workshop = forms.ModelChoiceField(queryset=Program.objects.none(),
                                      empty_label="----",
                                      required=False,
                                      label='Atelier')

    def __init__(self, *args, **kwargs):                                                                                    
        super(PersonForm, self).__init__(*args, **kwargs)
        article = self.initial.get('article', None)
        if article:
            a = Article.objects.get(pk=article)
            if a.workshop:
                self.fields['workshop'].queryset = Program.objects.filter(event=a.event, workshop=True)
                self.fields['workshop'].required = True
                self.helper.layout.insert(4, Row1Field('workshop',))

用于检索所有工作坊的queryset是动态的,所以ModelChoiceField里面的queryset属性设置为Program.objects.none(),动态的queryset在form的__init__方法里面完成

一切正常:选择中为workshop 显示的所有值都正常。但是当我发布表单时,出现验证错误:'Select a valid choice. This choice is not among available choices.'

我有什么遗漏吗?

【问题讨论】:

  • 请展示你的观点。

标签: python django python-2.7 django-forms


【解决方案1】:

根据在发布时实例化表单的代码,initial 可能不会被传递。你可以试试:

article = self.initial.get('article', None) or self.data.get('article', None)

这将从您的表单 POST 数据中获取 pk。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多