Модель Форма дополнительных полей - PullRequest
0 голосов
/ 01 марта 2011

Итак, я добавил дополнительное поле в форму через модель и использовал следующие варианты:

A_CHOICES = (
    ('none', 'none'),
    # further conversion table

class MyForm(ModelForm):

extra_field_a = ChoiceField(choices=A_CHOICES)

Если это поле не 'none', тогда я хочу использовать его значение для поляв модели, но я не уверен, как получить его, я пытался в MyForm:

def cleaned_extra(self):
    if(self.cleaned_data.get('extra_field_a') != 'none'):
        return self.extra_field_a
    else:
        return self.original_field

Но я получаю NameError, «глобальное имя не определено»?Любая помощь высоко ценится,

Адам

1 Ответ

1 голос
/ 01 марта 2011

Именно так вы и получите. Прикольный синтаксис в стороне, где находится NameError? self не определено? Где вы положили этот код.

Как правило, этот тип специфичного для поля кода используется в методах clean_FOO. http://docs.djangoproject.com/en/dev/ref/forms/validation/#form-and-field-validation

def clean_extra_field_a(self):
    data = self.cleaned_data.get('extra_field_a')
    if data != 'none':
        return data
    return None # remember to set this field as required=False

def save(self, *args, **kwargs):
    # override save to do something with your extra field.
    self.instance.myfield = self.cleaned_data.get('extra_field_a')
    super(MyForm).save(*args, **kwargs)

Обновление: сохранение в представлении не является проблемой.

mymodel = myform.save(commit=False) 
# ModelForm's will return the object being created/edited on save()
# commit=False will prevent a database save

mymodel.myfield = myform.cleaned_data.get('extra_field_a')
mymodel.save()

# note if you have an m2m, there is an extra method to call on commit=False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...