我得到select
和值Without
和With
。如何在Без
中的С
中获得已经转换的值django.po
和select
?
models.py
CONFIRMATION_WITHOUT = 'without'
CONFIRMATION_OTHER = 'other'
CONFIRMATION_WITH = 'with'
CONFIRMATION_CHOICES = (
(CONFIRMATION_WITHOUT, _('Without')), #Без
(CONFIRMATION_OTHER, _('Other')), #Другое
(CONFIRMATION_WITH, _('With')), #С
)
income_proof = models.CharField(_('proof'), max_length=255, choices=CONFIRMATION_CHOICES, default=CONFIRMATION_WITHOUT)
#[u'without', u'with']
forms.py
income_proof = forms.ModelChoiceField(queryset=CreditPayment.objects.values_list('income_proof', flat=True).distinct(), widget=forms.Select(attrs={'class': 'selectpicker form-control', 'title':_("Income proof")}))
html
{{ form.income_proof }}
例如可以制作表格吗?
<select>
<option value = "CONFIRMATION_WITHOUT">Без</option>
</select>
答案 0 :(得分:1)
对于表单,您应该不使用ModelChoiceField
[Django-doc]。确实,您在这里不是选择模型对象,而是选择一个值。因此,您应该改用ChoiceField
[Django-doc]。
关于选项,我认为您想使用CONFIRMATION_CHOICES
,因为通过使用查询集,您可以查询数据库,因此只能选择{ other 记录。
income_proof
,或者如果您只想要选择的值,则可以使用:
from app.models import CONFIRMATION_CHOICES
from django import forms
class MyForm(forms.ModelForm):
income_proof = forms.ChoiceField(
choices=CONFIRMATION_CHOICES,
widget=forms.Select(
attrs={'class': 'selectpicker form-control', 'title':_('Income proof')}
)
)
在构造表单时将调用from app.models import CONFIRMATION_CHOICES
from django import forms
class MyForm(forms.ModelForm):
income_proof = forms.ChoiceField(
choices=[],
widget=forms.Select(
attrs={'class': 'selectpicker form-control', 'title':_('Income proof')}
)
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
render = dict(CONFIRMATION_CHOICES)
self.fields['income_proof'].choices = [
(k, render.get(k, k))
for k in CreditPayment.objects.values_list('income_proof', flat=True).distinct()
]
。我们首先让超级构造函数完成创建字段的工作,然后制作__init__
的字典。
接下来,我们执行查询(与您使用的查询相同)以获取CONFIRMATION_CHOICES
的数据库值,然后使用字典将这些值映射到相应的翻译。因此,我们生成一个2元组的列表作为该表单字段的选择。
因此,我们在这里使用choices=
parameter [Django-doc],其中应包含:
income_proof
一个2元组的可迭代对象用作该字段的选择,或者 返回这样的可迭代对象的callable。此参数接受相同 格式为模型字段的
choices
参数。见模型 有关选择的详细信息,请参考现场参考文档。如果 参数是可调用的,每次字段的形式为 初始化。默认为空列表。