-
на 1.1 и 1.2.0 прекрастно работал сл. код:
вываливает ошибкуdef create_profile(sender, instance, created, **kwargs):
if created:
instance.profile.create()
post_save.connect(create_profile, sender=User)
Django Version: 1.2.1
Exception Type: TypeError
Exception Value:
save() got an unexpected keyword argument 'using'
Exception Location: /usr/lib/python2.5/site-packages/django/db/models/query.py in create, line 352
смотрим:
видим что к save добавился еще 1 аргумент. Пробовал его коментировать все заработало, вот собственно вопрос: ЧТО ТАКОЕ!!!???346. """
347. Creates a new object with the given kwargs, saving it to the database
348. and returning the created object.
349. """
350. obj = self.model(**kwargs)
351. self._for_write = True
352. obj.save(force_insert=True, using=self.db) ...
353. return obj
Кстати вот так работает
НО ЭТОЖ НЕ КРАСИВО!!!profile = ProfileModel(user=instance)
profile.save() -
Возможно в модели переопределен метод save. Нужно переопределять так:
def save(self, *args, **kwargs):
...
super(YourModel, self).save(*args, **kwargs)
... -
И кстати в 1.2.0 по идее тоже не должно было работать, именно в этой версии и появился using.
-
похоже, что в ProfileModel переопределен метод save. как-то так:
def save(self, force_insert=True):нужно обновить сигнатуру или сделать финт ушами:
def save(self, force_insert=True, **kwargs): -
ivanff.myopenid.com, пожалуйста не надо ногой
shiftзажимать! -
Да... чагот я тупанул :( всем пасибо.
-
Вот еще может туплю, но:
переделал я save на
При этом код post_save() заработал (старенький)def save(self, force_insert=False, force_update=False, **kwargs):
....
super(ProfileModel, self).save(force_insert=force_insert, force_update=force_update, **kwargs)
но вот во вьюхе теперь сломалась такая штуковина:def create_profile(sender, instance, created, **kwargs):
if created:
instance.profile.create()
post_save.connect(create_profile, sender=User)
Самое интереснео в том что ошибок не выдает, и профиль к пользователю создается, только пустой. Данные из формы form2 не сохраняются в профиль, а куда то пропадают...form1 = UserFrom()
form2 = ProfileForm()
next = request.GET.get('next', '/')
if request.method == 'POST':
form1 = UserFrom(request.POST)
if form1.is_valid():
user = form1.save(commit=False)
form2 = ProfileForm(data=request.POST, files=request.FILES)
if form2.is_valid():
user.save()
form2.instance = user.get_profile()
form2.save(commit=True)
user = authenticate(username=form1.cleaned_data['username'], password=form1.cleaned_data['password2'])
login(request, user)
По старому работало с django 1.1, 1.2, пришлось колхозить вот так:
Кто объяснит что не так?form1 = UserFrom()
form2 = ProfileForm()
next = request.GET.get('next', '/')
if request.method == 'POST':
form1 = UserFrom(request.POST)
if form1.is_valid():
user = form1.save(commit=False)
form2 = ProfileForm(data=request.POST, files=request.FILES)
if form2.is_valid():
user.save()
form2_ = ProfileForm(data=request.POST, files=request.FILES, instance=user.get_profile())
if form2_.is_valid():
form2_.save(commit=True)
#form2.instance = user.get_profile()
#form2.save(commit=True)
user = authenticate(username=form1.cleaned_data['username'], password=form1.cleaned_data['password2'])
login(request, user)
ps: Бум смотреть что еще сломалось ... -
Что значит "куда-то потерялись"? Так не бывает, смотрите внутрь в код.
В save формы они есть? А в save модели? Я бы еще посмотрел, может быть, в save бывают позиционные аргументы.
-
САМ офигеваю, в form2.data они есть, после form2.save(commit=True) их нет, то есть та запись для которой они заполнялись так и осталась пустая.
есть подозрение что в новой джанге form2.instance = Объект модели, не просто дополняет данный формы как в 1.1, а заменяет их... пришлось опять костылить:
вот так работает...form2 = ProfileForm(data=request.POST, files=request.FILES)
if form2.is_valid():
user.save()
form2_ = ProfileForm(data=request.POST, files=request.FILES, instance=user.get_profile())
if form2_.is_valid():
form2_.save(commit=True)
#form2.instance = user.get_profile()
#form2.save(commit=True)
user = authenticate(username=form1.cleaned_data['username'], password=form1.cleaned_data['password2'])
login(request, user) -
Да. Точно так оно и работает...
Если данные формы свежее - сохраняем модель, в _конструкторе_ формы задаем instance, сохраняем форму
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.



