【问题标题】:Get selected value from Django ModelChoiceField form从 Django ModelChoiceField 表单中获取选定的值
【发布时间】:2016-07-13 09:11:25
【问题描述】:

表格

class AddressForm(forms.Form):
    Country = forms.ModelChoiceField(queryset=Country.objects.filter(Enabled=True), empty_label="Select Country", widget=forms.Select(attrs={'class':'form-control'}))

html

<form method="POST" action="">
  {% csrf_token %}
  .
  .
  <div class="form-group col-md-4">
     {{ addressForm.Country }}
  </div>
</form>

查看

addressForm = AddressForm(request.POST, prefix="AddressForm")
country = addressForm['Country']

但是 country 变量包含整个 HTML 元素而不是选定的值。像forms.CharField这样的表单中的任何字段都会出现同样的问题

如何从表单元素中检索选定的值?

【问题讨论】:

  • 你为什么要访问它?这是验证后吗?
  • 我需要将AddressForm中的数据传递给模型Address对象来调用.save方法(?)

标签: django django-forms


【解决方案1】:

获取任何字段值的方式:调用is_valid(),然后调用form.cleaned_data[fieldname]

【讨论】:

  • 我可以使用 form.data[fieldname] 代替 form.cleaned_data[fieldname]。
  • 没有。这是帖子中的原始数据。
  • 我正在使用 form.data[fieldname] 从表单的 modelchoicefield 获取记录,因为表单向我发送的是 select(Dropdownlist) 而不是值。是错误还是有任何安全问题?
【解决方案2】:

我需要将 AddressForm 中的数据传递给模型 Address 对象以调用 .save 方法(?)

那么您可能应该只使用model form

class AddressForm(forms.Form):
     class Meta:
          model = Address

然后,您只需致电 form.save(),让 django 为您施展魔法。

无论哪种方式,您都应该在尝试访问任何数据之前致电is_valid。这会公开表单的 cleaned_data 字典,其中包含验证后的所有表单值。

【讨论】:

  • 我知道这一点,但我遇到了一些障碍:1) 能够将我自己的 css 类应用于输入元素 2) 能够为 .ForeignKey( 类型的模型字段创建下拉列表国家……)。
  • @John - 如果您还有其他问题,那么您应该考虑将它们作为您尝试和研究的新问题提出。如果这些答案中的任何一个解决了这个问题,您应该考虑接受它
猜你喜欢
  • 2019-11-16
  • 2013-11-22
  • 1970-01-01
  • 2018-06-01
  • 2019-05-23
  • 1970-01-01
  • 2021-11-15
  • 2021-01-19
  • 2015-05-29
相关资源
最近更新 更多