【问题标题】:Django Choicefield from a list列表中的 Django Choicefield
【发布时间】:2021-10-18 12:18:34
【问题描述】:

我有一个关于表单的小问题。

所以我通常会这样创建选择表单:

Metric_name_CHOICES = [
        ('Transfer', 'Transfer'),
        ('RFI/RFD', 'RFI/RFD'),
        ('...', '...')
    ]
Metric_name = forms.ChoiceField(choices=correct_associate_action_CHOICES, widget=forms.Select)

这是一个很好的方法,但是如果我希望选择列表来自模型中的列表呢?

我猜是这样的:

Metric_name = forms.ChoiceField(choices=dv_model.objects.get(Metric_name_dv), widget=forms.Select)

所以要获取模型中列内的所有字段,并将它们显示为下拉字段。

【问题讨论】:

  • 你为什么不用ForeignKey,它会完全符合你的需求
  • @Kholdarbekov:这涉及一个 form,这本身并不是基于模型构建的表单。 ForeignKey 是在模型中使用的东西,默认情况下与表单层的 ModelChoiceField 一起使用。

标签: python html django django-models django-forms


【解决方案1】:

在这种情况下,您使用ModelChoiceField [Django-doc]。这是ChoiceField,但选项代表模型对象。例如,这是 ForeignKey 的默认表单字段。

因此,您可以通过以下方式实现:

Metric_name = forms.ModelChoiceField(
    queryset=dv_model.objects.all(),
    widget=forms.Select
)

它将使用dv_model 对象的主键作为关键项,并使用该模型对象上str(…) 的结果作为选项文本。

【讨论】:

    【解决方案2】:

    对于Choice Field,我基本上是这样做的:

    在 models.py 文件中:

    Metric_name_CHOICES = (
            ('Transfer', 'Transfer'),
            ('RFI/RFD', 'RFI/RFD'),
            ('...', '...')
        )
    
    Metric_name = models.CharField(max_length=70,choices=Metric_name_CHOICES,default="")
    

    如果你想传递默认值,你可以从你的选择中选择

    在 forms.py 中:

    'Metric_name ': forms.Select(attrs={'class': 'form-control'})
    

    希望对您有所帮助....

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 2011-04-10
      • 2011-08-20
      相关资源
      最近更新 更多