【问题标题】:Select a valid choice. That choice is not one of the available choices. (When I try to save dropdown list selected data in database)选择一个有效的选项。该选择不是可用的选择之一。 (当我尝试将下拉列表选择的数据保存在数据库中时)
【发布时间】:2017-12-03 02:03:54
【问题描述】:

我已经在 Stackoverflow 上看到了所有问题。但我仍然无法解决这个错误。我想要一个下拉列表数据出现在我的网站上。我从另一个模型中获得的数据。所以直到这里我都很好。现在,当我尝试将此数据保存在数据库中时,会出现此错误。

Select a valid choice. That choice is not one of the available choices.

我的模型是这样的

 apn = models.CharField(null=True, blank=False, max_length=255)

我的form.py文件是这样的

class labelModelForm(forms.ModelForm):
    class Meta:
        model = Labels_tool
      apn = forms.ModelChoiceField(queryset=Field.objects.values_list('sql_name', flat=True), empty_label="(Choose field)") 

而 view.py 文件是:

 def ImportLabelView(self):
        self.form = labelModelForm(self.request.POST)
        # self.form = self.layer.form(self.request.POST)
        if self.save_form_if_appropriate('label'):
            return self.redirect('mapport.maps.layers.importlabel', self.map.id, self.layer.id)
        return self.render('mapport/maps/layers/Labels_detail.html')

出现在页面上的下拉菜单很好。只是问题是当我尝试将其保存在数据库中时。

【问题讨论】:

  • 你能显示整个视图,而不是它的一部分吗?
  • @FazilZaid 模板 'Labels_detail.html' 的完整视图。我只用这个。

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


【解决方案1】:

您不应该使用值列表。您应该使用普通查询集,然后使用to_field_name,如下所示:https://docs.djangoproject.com/en/1.11/ref/forms/fields/#django.forms.ModelChoiceField.to_field_name

apn = forms.ModelChoiceField(queryset=Field.objects.all(), empty_label="(Choose field)", to_field_name="sql_name")

然后当你去保存东西的时候,只需提取相关信息保存在apn,虽然真的apn应该只是Field的外键。

我也会考虑看看这个问题是否对你有帮助:Change Django ModelChoiceField to show users' full names rather than usernames

我怀疑你在数据库中做了一些你不应该做的事情。

【讨论】:

  • 我没明白。你能修改一下我的代码吗? to_field_name 是我的数据库字段?
  • @ephemeral 我又添加了一点
  • 我更改了表单,但后来我得到一个空文本框而不是下拉菜单。
  • @ephemeral 是 sql_name Field 中的模型字段吗?
  • 是的。我正在从 Field.sqlname 获取下拉数据。
猜你喜欢
  • 1970-01-01
  • 2018-06-11
  • 2021-04-12
  • 2016-05-18
  • 2017-12-30
  • 2020-10-30
  • 2012-01-22
  • 2018-08-13
  • 2019-01-14
相关资源
最近更新 更多