Форум сайта python.su
Здравствуйте.
Подскажите что неправильно в коде, что выдается ошибка? и что нужно поменять чтобы при сохранении автоматически добавлялась группа юзеру:
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
Офлайн
Нашел проблему. Заключался она в том, что подключение экземпляра 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)
Офлайн
а может все-таки не влоб сохранять , а сначала id модели проверить ? Если верить доки по джанге если модель не сохранена - id=None …..Соответственно лишний раз базу дергать не придеться …
Офлайн
MaddyЯ в смысле спрашиваю про сам принцип сохранения через двойной вызов super …
id модели проверить
romankrvА проверять есть ли там id или нет это уже оптимизация.
Как Вам такое решение? И можно узнать какие еще могут быть?
Офлайн
таки а варианты есть ? Если родительской модели не существует - ее надо породить …
Офлайн
romankrvОтветь сам себе на вопрос - зачем ты его два раза вызываешь?
Я в смысле спрашиваю про сам принцип сохранения через двойной вызов super …
Офлайн
DaevaornДля того, что бы еще раз уточнить мой вопрос и получить более правильный ответ, потому что ответы иногда идут не в контексте вопроса. (Я спрашиваю о принципе решения, а мне о оптимизации говорят).
зачем ты его два раза вызываешь
Офлайн
DaevaornА как я понимаю запись должна существовать в базе в смысле экземпляр UserProfile должен быть уже в базе перед тем как можно было бы присоеденить к нему запись и таблицы GROUP, поэтому я вызываю дважды первая записывает без group вторая сохраняет связь с group, а иначе возникает ошибка
зачем ты его два раза вызываешь?
Офлайн