Чистый `ChoiceField` от Джанго Форм - PullRequest
0 голосов
/ 19 сентября 2018

Модель:

class SocialGroup(models.Model):
    INDIVIDUAL = 'individual'
    INSTITUTE = 'institute'
    options = ((INDIVIDUAL, 'Individual'),
               (INSTITUTE, 'Institute'))
    level = models.CharField(choices=options, max_length=100)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['name']

Форма:

class GroupLevelForm(forms.Form):
    level = forms.ChoiceField(choices=SocialGroup.options)

    def clean_level(self):
        return self.cleaned_data['level']

Когда я звоню в мою форму, я делаю это как level = GroupLevelForm({level: 'Individual'}).Я хочу individual вернуть в очищенные данные.

  • Я передаю внешнее имя в своей форме, как я могу вернуть внутреннее имя choice field.
  • Например: options = (('internal, 'External'),) когда я делаю это как level = GroupLevelForm({level: 'External'}) как я могу получить internal в cleaned_data.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Если я правильно понял вопрос, думаю, вы можете сделать

def clean_level(self):
    selected_display_name = self.cleaned_data['level']
    for val, disp_name in SocialGroup.options:
        if disp_name == selected_display_name:
            return val
    return selected_display_name  # or whatever default you want
0 голосов
/ 19 сентября 2018

Произошла ошибка, потому что вы не звоните is_valid() в вашей форме в любое время.cleaned_data существует только после того, как был вызван.

Вы хотите что-то вроде [псевдокода входящего]:

def clean_fields():
    if form.is_valid():
        self.cleaned_data['level']

Обратитесь к документации для объяснения Джанго: buildingформа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...