medor
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

forms.py
text/x-python

Download raw (2.9 KB)

from django import forms
from django.forms.models import model_to_dict, fields_for_model
from subscribe.models import Person, Cooperation, Subscription


class ConfirmForm(forms.Form):
    error_css_class = 'error'
    required_css_class = 'required'

    confirm = forms.BooleanField()


class CooperationForm(forms.ModelForm):
    """
    http://stackoverflow.com/questions/15889794/creating-one-django-form-to-save-two-models
    """
    error_css_class = 'error'
    required_css_class = 'required'

    def __init__(self, *args, **kwargs):
        instance = kwargs.get('instance')
        self._person_fields = [f.name for f in Person._meta.fields]
        self._person_fields.remove(u'id')
        self._person_fields = tuple(self._person_fields)
        _initial = model_to_dict(instance.person, _fields) if instance is not None else {}
        kwargs['initial'] = _initial
        super(CooperationForm, self).__init__(*args, **kwargs)
        self.fields.update(fields_for_model(Person, self._person_fields))
        self.fields['birth_date'].required = True
        self.fields['id_number'].required = True
        self.fields['nationality'].required = True
        self.fields['birth_date'].widget.attrs["placeholder"] = "JJ/MM/AAAA"
        self.fields['phone_number'].widget.attrs["placeholder"] = "+32 "

    class Meta:
        model = Cooperation
        exclude = ('person',)

    def save(self, *args, **kwargs):
        d = {}
        for key in self._person_fields:
            d[key] = self.cleaned_data[key]

        person = Person(**d)
        person.save()
        self.instance.person = person

        cooperation = super(CooperationForm, self).save(*args,**kwargs)
        return cooperation


class SubscriptionForm(forms.ModelForm):
    """
    http://stackoverflow.com/questions/15889794/creating-one-django-form-to-save-two-models
    """
    error_css_class = 'error'
    required_css_class = 'required'

    def __init__(self, *args, **kwargs):
        instance = kwargs.get('instance')
        self._person_fields = [f.name for f in Person._meta.fields]
        self._person_fields.remove(u'id')
        self._person_fields = tuple(self._person_fields)
        _initial = model_to_dict(instance.person, _fields) if instance is not None else {}
        kwargs['initial'] = _initial
        super(SubscriptionForm, self).__init__(*args, **kwargs)
        self.fields.update(fields_for_model(Person, self._person_fields))
        self.fields['phone_number'].widget.attrs["placeholder"] = "+32 "



    class Meta:
        model = Subscription
        exclude = ('person',)

    def save(self, *args, **kwargs):
        d = {}
        for key in self._person_fields:
            d[key] = self.cleaned_data[key]

        person = Person(**d)
        person.save()
        self.instance.person = person

        subscription = super(SubscriptionForm, self).save(*args,**kwargs)
        return subscription