【问题标题】:django can't save model choices selected valuesdjango 无法保存模型选择选定的值
【发布时间】:2016-07-19 19:15:11
【问题描述】:

我想在模型字符域中保存选定的选项 我的models.py:

qobj = Model1.objects.all()

CHOICE = (
    (x.id, x.name) for x in qobj
)


class Model2(models.Model):
    choice_field = models.CharField(max_length=77, choices=CHOICE)

class Model2Form(ModelForm):
    class Meta:
        model = Model2
        fields = ['choice_field']

当我尝试保存 model2 时出现错误:

“选择一个有效的选项。5 不是可用选项之一。”。

我正在尝试forms.ModelChoiceField,但我无法让Model2.get_choice_field_display()forms.ChoiceField 和小部件Select 工作。 可能有人知道如何解决这个问题?

【问题讨论】:

  • 请编辑您的问题,包括您的表单代码和您如何使用表单的视图代码?

标签: django


【解决方案1】:

我认为问题在于您将choice_field 定义为CharField,但您的选择使用id 作为键,它们是整数。您需要将choice_field 更改为models.IntegerField

另外,听起来您的choice_field 是基于另一个模型的条目。您填充数据的方式可能不起作用,因为您的 CHOICES 变量只会被评估一次。你应该使用ForeignKey 代替choice_field

class Model2(models.Model):
    choice_field = models.ForeignKey(Model1)

如果你使用 django 默认的表单呈现方式,ForeignKey 会像 choices 一样呈现为下拉列表,所以你一定要使用它。

【讨论】:

  • 我没有尝试 IntegerField。可能是你的权利。并且选择值不是整数?
  • 但是Model1不是choicefields包含
  • qobj - 是几个模型对象值的总和。当我做choices=CHOICE 时,CHOICE 是一个qobj。问题是——对我做选择吗?如果不进行所有更改,其他方法将无法正常工作。
  • 是的,我用ManyToMany解决了这个问题。但我不喜欢这个我想要的下拉框选择小部件。
猜你喜欢
  • 2016-07-27
  • 2017-12-28
  • 2017-06-16
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多