Форум сайта python.su
0
Подскажите пожалуйста как грамотно делается добавление данных сложной модели (с ключами) в базу.
Те вот такая учебная модель пользователя 
У него есть Город, а у Города есть Тип. На момент добавления пользователя Города и Типа, введенного в форме, в базе может и не быть. Те задача проверить есть ли такой тип в базе, который был указан в форме, если нет, то добавить. Затем есть ли такой город в базе, если нет то добавить с типом, добавленным (или найденном в случае существования) выше. И наконец, добавить пользователя с этим городом.
Первая мысль пришла такая:
В форму пользователя добавить поля соответвующие двум другим моделям, City и CityType. Последние 4 строки свойств:
class MyUserCreationForm(forms.ModelForm): email = forms.CharField(label=u'E-mail') username = forms.CharField(label=u'Имя пользователя') password1 = forms.CharField(label=u'Пароль', widget=forms.PasswordInput) password2 = forms.CharField(label=u'Подтверждение пароля', widget=forms.PasswordInput) locality_name = forms.CharField() locality_type_name = forms.CharField() locality_short_type_name = forms.CharField() locality_index = forms.CharField() class Meta: model = MyUser fields = ('email', 'username', 'city')
def clean(self): cleaned_data = super(MyUserCreationForm, self).clean() locality_name = self.cleaned_data.get('locality_name') locality_type_name = self.cleaned_data.get('locality_type_name') locality_short_type_name = self.cleaned_data.get('locality_short_type_name') locality_index = self.cleaned_data.get('locality_index') try: city_type = CityType.objects.get(name=locality_type_name) except: city_type = CityType.objects.create(name=locality_type_name, short_name=locality_short_type_name) try: city = City.objects.get(index=locality_index) except: city = City.objects.create(name=locality_name, index=locality_index, city_type=city_type) return self.cleaned_data
Отредактировано Mari (Июнь 5, 2014 22:20:13)
Офлайн
75
Mari
если надо просто еще одно поле AbstractBaseUser это оверкил, а надо просто AbstractUser
Офлайн