django - ModelChoiceField 列出元组而不是简单值
问题描述
我有一个带有 ModelChoiceField 输入的 django 表单,它将结果列为元组而不是简单值。
我不知道该怎么做。
DJANGO
class PayThis(forms.Form):
amount = forms.FloatField(required=False)
cost2 = forms.FloatField(required=False)
year = forms.ModelChoiceField(required=False,queryset=AnAgricol.objects.values_list('anul').all())
HTML
<option value="(2019,)">(2019,)</option>
我希望得到这个:< option value="2019">2019</option >
解决方案
ModelChoiceField
顾名思义,A处理模型对象。因此你不能values_list
在这里使用。
因此,您Form
应该定义如下内容:
class PayThis(forms.Form):
amount = forms.FloatField(required=False)
cost2 = forms.FloatField(required=False)
year = forms.ModelChoiceField(required=False, queryset=AnAgricol.objects.all())
您可以覆盖__str__
返回年份的字符串表示形式,例如:
AnAgricol(models.Model):
anul = models.IntegerField()
def __str__(self):
return str(self.anul)
但是,如果年份不是要代表的东西AnAgricol
,那么您可以使用ChoiceField
[Django-doc],例如:
class PayThis(forms.Form):
amount = forms.FloatField(required=False)
cost2 = forms.FloatField(required=False)
year = forms.ChoiceField(required=False, choices=[])
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['year'].choices = [
(yr, yr) for yr
in AnAgricol.objects.values_list('anul', flat=True).distinct()
]
推荐阅读
- asp.net-core - Asp.net Core MVC 视图本地化 IsResourceNotFound = true 在默认语言环境之外
- git - 即使没有,git也会报告差异
- r - ggplot y 轴值显示为对数:我想让它们成为线性并将其减少到 100 秒而不是 1000 秒
- javafx - 如何在网格单元格中定位按钮
- python - 如何计算熊猫列单元格中的条件(IF)?
- arrays - 在过程和类对象之间移动数组
- ios - Ionic Cordova OpenTok 无法从 IOS 发布视频
- haskell - RandomGen 的 split 函数的确切语义应该是什么?
- python-3.8 - 在python中解析文本文件输入
- sql - 使用 PostgreSQL 12 在 jsonb 列的数组字段上搜索部分值