[英]django modelchoicefield with distinct column values
我想要做的是從模型表中的一列填充具有不同值的select
元素。
我的forms.py:
class ExampleForm(forms.ModelForm):
only_unique_values = forms.ModelChoiceField(
required = False,
queryset = ReadOnlyTable.objects.values('pie').distinct(),
widget = forms.Select
)
使用values
函數返回一個ValuesQuerySet
而不是QuerySet
,這對我的select
元素來說是一個問題,因為所有選項都填充了字典語法作為值而不僅僅是列數據作為string
s。
最終看起來像這樣 :
<select id="id_example" name="example_form">
<option value="" selected="selected">---------</option>
<option value="{'pie': u'apple '}">{'pie': u'apple '}</option>
<option value="{'pie': u'pecan '}">{'pie': u'pecan '}</option>
<option value="{'pie': u'dutch '}">{'pie': u'dutch '}</option>
<option value="{'pie': u'pumpkin '}">{'pie': u'pumpkin '}</option>
</select>
我希望它看起來像這樣 :
<select id="id_example" name="example_form">
<option value="" selected="selected">---------</option>
<option value="apple">apple</option>
<option value="pecan">pecan</option>
<option value="dutch">dutch</option>
<option value="pumpkin">pumpkin</option>
</select>
如何從模型上的distinct()
調用返回string
值?
模型選擇字段用於從模型中選擇實例。 如果要從模型實例中選擇值,則模型選擇字段不再適用。
您可以使用選擇字段,並在表單的__init__
方法中設置選項。
class ExampleForm(forms.ModelForm):
only_unique_values = forms.ChoiceField(
required=False,
choices=[],
widget=forms.Select,
)
def __init__(self, *args, **kwargs):
super(ExampleForm, self).__init__(*args, **kwargs)
self.fields['only_unique_values'].choices = ReadOnlyTable.objects.values_list('pie', 'pie').distinct()
執行values_list('pie', 'pie')
choice字段所需的兩元組列表。
在Django 1.8+中,您不再需要覆蓋__init__
。 相反,您可以定義一個返回選項列表的callable,並將callable傳遞給您的choice字段。
def unique_values():
return ReadOnlyTable.objects.values_list('pie', 'pie').distinct()
class ExampleForm(forms.ModelForm):
only_unique_values = forms.ChoiceField(
required=False,
choices=unique_values,
widget=forms.Select,
)
要在選擇字段中包含空白選項,只需將項添加到選項列表中:
def unique_values():
return [("", "---------")] + list(ReadOnlyTable.objects.values_list('pie', 'pie').distinct())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.