Уведомления

Группа в Telegram: @pythonsu

#1 Март 21, 2009 02:48:19

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

Здравствуйте.
Подскажите что неправильно в коде, что выдается ошибка? и что нужно поменять чтобы при сохранении автоматически добавлялась группа юзеру:

class UserProfile(User):
middle_name = models.CharField(max_length=30, blank=True)

def save(self, force_insert=False, force_update=False):
grp = Group.objects.get(name='manager')
self.groups = grp

super(UserProfile, self).save(force_insert, force_update)
ValueError at /admin/registration/userprofile/add/
'UserProfile' instance needs to have a primary key value before a many-to-many relationship can be used.Request Method: POST
Request URL: http://127.0.0.1:8000/admin/registration/userprofile/add/
Exception Type: ValueError
Exception Value: 'UserProfile' instance needs to have a primary key value before a many-to-many relationship can be used.
Exception Location: /usr/lib/python2.5/site-packages/django/db/models/fields/related.py in __init__, line 380
Спасибо

Офлайн

#2 Март 21, 2009 10:23:34

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

Нашел проблему. Заключался она в том, что подключение экземпляра M2M происходит еще не на сохраненный экземпляр моей сохраняемой модели – (UserProfile).
решил проблему с помощью двойного вызова super так:

class UserProfile (User):
middle_name = models.CharField(max_length=30, blank=True)

def save(self, force_insert=False, force_update=False):
super(UserProfile, self).save(force_insert, force_update)
grp = Group.objects.get(name='manager')
self.groups.add(grp)
super(UserProfile, self).save(force_insert, force_update)
Как Вам такое решение? И можно узнать какие еще могут быть?

Спасибо

Отредактировано (Март 21, 2009 12:06:22)

Офлайн

#3 Март 21, 2009 12:02:19

Maddy
От:
Зарегистрирован: 2009-02-16
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

а может все-таки не влоб сохранять , а сначала id модели проверить ? Если верить доки по джанге если модель не сохранена - id=None …..Соответственно лишний раз базу дергать не придеться …



Офлайн

#4 Март 21, 2009 12:11:25

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

Maddy
id модели проверить
Я в смысле спрашиваю про сам принцип сохранения через двойной вызов super …
romankrv
Как Вам такое решение? И можно узнать какие еще могут быть?
А проверять есть ли там id или нет это уже оптимизация.

Офлайн

#5 Март 21, 2009 12:27:58

Maddy
От:
Зарегистрирован: 2009-02-16
Сообщения: 26
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

таки а варианты есть ? Если родительской модели не существует - ее надо породить …



Офлайн

#6 Март 21, 2009 13:40:08

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

автосохранение в M2M в методе модели

romankrv
Я в смысле спрашиваю про сам принцип сохранения через двойной вызов super …
Ответь сам себе на вопрос - зачем ты его два раза вызываешь?



Офлайн

#7 Март 21, 2009 14:57:54

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

Daevaorn
зачем ты его два раза вызываешь
Для того, что бы еще раз уточнить мой вопрос и получить более правильный ответ, потому что ответы иногда идут не в контексте вопроса. (Я спрашиваю о принципе решения, а мне о оптимизации говорят).
Вот.

Офлайн

#8 Июль 18, 2009 23:51:12

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

автосохранение в M2M в методе модели

Daevaorn
зачем ты его два раза вызываешь?
А как я понимаю запись должна существовать в базе в смысле экземпляр UserProfile должен быть уже в базе перед тем как можно было бы присоеденить к нему запись и таблицы GROUP, поэтому я вызываю дважды первая записывает без group вторая сохраняет связь с group, а иначе возникает ошибка
“'UserProfile' instance needs to have a primary key value before a many-to-many relationship can be used.”
А какие есть другие варианты?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version