2015-04-02 11 views
1

У меня есть форма:Изменение значения поля формы перед сохранением

class ReferencesForm(forms.ModelForm): 

    error_css_class = 'error' #set some css when an error 
    contactName = forms.CharField(label='Contact Name:') 
    company = forms.CharField(label='Company:') 
    address = forms.CharField(label='Address:') 
    telephoneNumber = forms.CharField(label='Telephone Number:') 

    class Meta: 
     fields = '__all__' 
     model = References 

    def __init__(self, *arg, **kwarg): 
     super(ReferencesForm, self).__init__(*arg, **kwarg) 
     self.empty_permitted = True 
    def clean(self): 
     """ Custom validation for fields 
     """ 
     cleaned_data = super(ReferencesForm, self).clean() 

     return self.cleaned_data 

И строить его в моих взглядах файл следующим образом:

ReferencesInlineFormSet = inlineformset_factory(
     Applicant, References, form=ReferencesForm, extra=1, can_delete=False) 
... 
if request.method == 'POST': 
    references_formset = ReferencesInlineFormSet(
     request.POST, instance=applicant) 

    if (references_formset.is_valid()): 
     references_formset.instance['address'] = "test"; 
     references_formset.save(); 

Я не думаю, что модель заявитель имеет важное значение здесь но при необходимости я могу добавить его позже.

Я хочу объединить некоторые поля адресов (addr1, addr2, town и т. Д.) В одно поле базы данных под названием «адрес» и думал об этом в файле представлений.

Я попытался простое задание с «тестом» здесь и я получил ошибку:

'Applicant' object does not support item assignment 
references_formset.instance['address'] = "test"; 

ответ

0

Вы можете получить доступ к полей формы с помощью экземпляра модели. Например. вместо этой строки:

references_formset.instance['address'] = "test"; 

попробовать эту строку:

applicant.address = "test" 
3

Вы могли бы использовать что-то вроде этого:

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.address = "test" 
    obj.save() 
0

Easy:

instance = form.instance 
instance.user = request.user 
instance.save() 

Но будьте осторожны, это не проверяет is_valid() , Если вы хотите сделать это, вы можете создать экземпляр формы с новыми значениями:

# NOT TESTED, NOT SURE IF THIS WORKS... 
form = MyForm(instance=instance) 
if form.is_valid(): 
    form.save() 
Смежные вопросы