【问题标题】:ordering modelchoicefield in django loses formatting在 django 中订购 modelchoicefield 丢失格式
【发布时间】:2021-07-24 03:10:40
【问题描述】:

我想在我的表单视图中订购一个列表,并在这里找到了这篇文章:

How do I specify an order of values in drop-down list in a Django ModelForm?

所以我编辑了我的代码并添加了specialty = forms.ModelChoiceField(queryset ='...')这一行

然后我重新加载表单,小部件看起来很时髦。我检查了html代码,专业的顺序确实正确!但是它错过了添加表单控件类的小部件定义。我不确定为什么。如果我删除了 special = form.ModelChoiceField 行,那么除了下拉列表的顺序不正确(按名称字段按字母顺序排列)之外,一切看起来都很棒

不知道为什么它缺少小部件定义,甚至附加了类表单控件或 tabindex。猜测 special = forms.ModelChoiceField 以某种方式覆盖它?

class ProviderForm(forms.ModelForm):

  specialty = forms.ModelChoiceField(queryset = Specialty.objects.order_by('name'))   #added this

  def __init__(self, *args, **kwargs):
    super(ProviderForm, self).__init__(*args, **kwargs)
    self.helper = FormHelper()  
    self.helper.form_class = 'form-horizontal'
    self.helper.label_class = 'col-md-6'
    self.helper.field_class = 'col-md-6'
    self.fields['ptan'].required = False
    self.helper.layout = Layout(
        Field('...'),
        Field('specialty'),
        FormActions(
          Submit('save', 'Save'),
          Button('cancel', 'Cancel'),
          Button('terminate', 'Terminate', css_class="btn-danger"),
        ),
    )
 
  class Meta:
    
    model=Provider
    fields = (
      '...',
      'specialty'
    ) 


    widgets = {
    
      'specialty':Select(attrs={
          'tabindex':'4',
          'class':'form-control'
      }),
      
    }

【问题讨论】:

    标签: python django


    【解决方案1】:

    这在文档中进行了解释,在 big note 中:

    当您像这样显式实例化表单字段时,了解 ModelForm 和常规 Form 之间的关系非常重要。

    ModelForm 是一个可以自动生成特定字段的常规表单。自动生成的字段取决于 Meta 类的内容以及已经以声明方式定义的字段。基本上,ModelForm 只会生成表单中缺少的字段,或者换句话说,未以声明方式定义的字段。

    以声明方式定义的字段保持原样,因此对元属性(例如widgets、标签、help_texts 或error_messages)所做的任何自定义都会被忽略;这些仅适用于自动生成的字段。

    所以,只需将小部件参数添加到您的声明性字段:

    specialty = forms.ModelChoiceField(
        queryset = Specialty.objects.order_by('name'),
        widget = Select(attrs={
              'tabindex':'4',
              'class':'form-control'
          })
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2019-11-11
      • 2014-09-27
      相关资源
      最近更新 更多