Форум сайта python.su
Ребята, подскажите. Есть модель для сохранения адреса страницы, e-mail и даты создания.
class Adresa(models.Model): email = models.EmailField() adres = models.URLField() crdata = models.DateField() def __unicode__(self): return self.adres
class AdrForm(forms.Form): email = forms.EmailField() adres = forms.URLField() crdate = forms.DateField()
def addadres(request): if request.method == 'POST': form = AdrForm(request.POST) if form.is_valid(): cd = form.cleaned_data a = Adresa(email=cd['email'], adres=cd['adres'], crdata=datetime.now()) a.save() return HttpResponseRedirect('/thanks/') else: form = AdrForm() return render_to_response('addadres.html',{'form': form})
Офлайн
А зачем Вам простая форма, если она целиком повторяет модель? Делайте ModelForm.
ModelForm тынц
Офлайн
FishHook, действительно ModelForm подходит больше. Как я понял, дополнительна экранировка символов перед сохранением в базе не требуется? Когда я пробовал, то в поле типа URLField запросто разрешается ставить одинарные и двойные кавычки, их не нужно дополнительно обрабатывать?
И ещё вопрос: при использовании ModelForm можно как-то выполнять предварительную обработку поля до того, как оно запишется в БД?
Офлайн
digiПереопредели в форме def _clean_fields(self)
FishHook, действительно ModelForm подходит больше. Как я понял, дополнительна экранировка символов перед сохранением в базе не требуется? Когда я пробовал, то в поле типа URLField запросто разрешается ставить одинарные и двойные кавычки, их не нужно дополнительно обрабатывать?
И ещё вопрос: при использовании ModelForm можно как-то выполнять предварительную обработку поля до того, как оно запишется в БД?
class OrphanChildLegalState(ModelForm): def __init__(self, *args, **kw): super(OrphanChildLegalState, self).__init__(*args, **kw) self.child=kw.get('instance') if self.child.get_age>=18: choices=[('%s_%s' % ('A', x[0]),x[1]) for x in Child.ORPHAN_REASONS] choices+=[('%s_%s' % ('B', x[0]),x[1]) for x in Child.NON_TRUSTEE_REASONS] choices.insert(0, (None,'------')) common_field=forms.ChoiceField(choices=choices, label=u'Причина получения правового статуса') self.fields={'common_field':common_field} legal_status=self.child.legal_status reason=self.child.orphan_reason or self.child.non_trustee_reason self.initial.update({'common_field':'%s_%s' %(legal_status, reason)}) def _clean_fields(self): super(OrphanChildLegalState, self)._clean_fields() if self.cleaned_data.get('common_field'): c_f=self.cleaned_data['common_field'] legal_status, reason=c_f.split('_') if c_f!='None' else (None,None) self.cleaned_data.update({'legal_status':legal_status}) if legal_status=="A": self.cleaned_data.update({'orphan_reason':reason}) elif legal_status=="B": self.cleaned_data.update({'non_trustee_reason':reason}) else: self.cleaned_data.update({'non_trustee_reason':None,'orphan_reason':None, }) class Meta: model=Child fields = ('legal_status','orphan_reason', 'non_trustee_reason')
Офлайн
FishHook, именно так и сделал, спасибо.
Офлайн