Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Проблема с двумя формами и потерей User [RSS Feed]

#1 Дек. 10, 2008 00:53:14

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблема с двумя формами и потерей User

Здравствуйте!
Пишу для своего сайта регистрацию (да, я знаю что есть хорошая django-account, но хочется написать самому, чтобы разобраться), и вот при написании, нашел странность. Имеются такие модели:

#-*-coding:utf8-*-
from django.contrib.auth.models import User
from django.db import models

class ClientProfile(models.Model):
DAY_CHOICES = (
('Mo', u'Понедельник'),
('Tu', u'Вторник'),
('We', u'Среда'),
('Th', u'Четверг'),
('Fr', u'Пятница'),
('Sa', u'Суббота'),
('Su', u'Воскресенье'),
)
user = models.ForeignKey(User, unique=True)
urid_address = models.CharField(max_length=400, verbose_name=u"Юр.адрес:", null=True)
reg_address = models.CharField(max_length=400, verbose_name=u"Адрес регистрации:", null=True)
fact_address = models.CharField(max_length=400, verbose_name=u"Фактический адрес:", null=True)
time_work = models.TextField(max_length=400, verbose_name=u"Время работы:", null=True)
visit_day = models.CharField(max_length=2, verbose_name=u"День посещения:",
choices=DAY_CHOICES, null=True)
phone_number = models.IntegerField(max_length=16, verbose_name=u"Тел.номер:", null=True)
contact_face = models.CharField(max_length=64, verbose_name=u"Контактное лицо:", null=True)
is_trade = models.BooleanField(default=False)
Такие формы:
#-*-coding:utf8-*-
from django import forms
from django.contrib.auth.forms import UserCreationForm
from accounts.models import ClientProfile
from django.contrib.auth.models import User


class ClientForm(forms.ModelForm):
class Meta:
model = ClientProfile
exclude = ('user', 'is_trade')

class UserForm(UserCreationForm):
email = forms.EmailField()
def save(self, commit=True):
user = super(UserForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
и вот такой view:
#-*-coding:utf8-*-
from libs.decorators import render_to
from accounts.models import ClientProfile
from accounts.forms import ClientForm, UserForm
from django.contrib.auth.models import User
from django.shortcuts import render_to_response

def reg_user(request):
"""This is view for registration user in database"""
if request.user.is_anonymous():
if request.method == 'POST':
form1 = UserForm(request.POST)
form2 = ClientForm(request.POST)
if form1.is_valid() and form2.is_valid():
user = form1.save()
form2.user = user
form2.save()
return render_to_response('accounts/welcome.html')
else:
form1 = UserForm()
form2 = ClientForm()
return render_to_response('accounts/registration.html',
{'form1':form1, 'form2':form2})
return render_to_response('accounts/login_success.html', {})
При отправке данных из форм, получаю такую ошибку
IntegrityError at /accounts/registration/
(1048, “Column ‘user_id’ cannot be null”)Request Method: POST

Более подробный лог

Подскажите, что может это быть?

P.S. в джанге перед сохранением form2.save() делал вывод form2.user_id, он равнялся user.id, также как и тиа form2.user=user
P.S.S. UserCreationForm использую, т.к. это “изкоробочное” средство для првоерки пароля, и выведения ошибок при неправильности.



Отредактировано (Дек. 10, 2008 00:54:12)

Офлайн

#2 Дек. 10, 2008 08:47:43

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с двумя формами и потерей User

aliens
Подскажите, что может это быть?
А form2 не знает откуда ей брать юзера для поля user создаваемого профиля.
user = form1.save()
profile = form2.save(False)
profile.user = user
profile.save()



Офлайн

#3 Дек. 10, 2008 12:03:44

aliens
От:
Зарегистрирован: 2007-08-14
Сообщения: 135
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблема с двумя формами и потерей User

Daevaorn
aliens
Подскажите, что может это быть?
А form2 не знает откуда ей брать юзера для поля user создаваемого профиля.
user = form1.save()
profile = form2.save(False)
profile.user = user
profile.save()
Спасибо! помогло



Офлайн

  • Начало
  • » Django
  • » Проблема с двумя формами и потерей User[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version