可以在select中获得转换后的值吗?

时间:2019-06-21 18:05:56

标签: django django-models django-forms django-templates

我得到select和值WithoutWith。如何在Без中的С中获得已经转换的值django.poselect

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>

1 个答案:

答案 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参数。见模型   有关选择的详细信息,请参考现场参考文档。如果   参数是可调用的,每次字段的形式为   初始化。默认为空列表。