Найти - Пользователи
Полная версия: автосохранение в M2M в методе модели
Начало » Django » автосохранение в M2M в методе модели
1
romankrv
Здравствуйте.
Подскажите что неправильно в коде, что выдается ошибка? и что нужно поменять чтобы при сохранении автоматически добавлялась группа юзеру:
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
Спасибо
romankrv
Нашел проблему. Заключался она в том, что подключение экземпляра 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)
Как Вам такое решение? И можно узнать какие еще могут быть?

Спасибо
Maddy
а может все-таки не влоб сохранять , а сначала id модели проверить ? Если верить доки по джанге если модель не сохранена - id=None …..Соответственно лишний раз базу дергать не придеться …
romankrv
Maddy
id модели проверить
Я в смысле спрашиваю про сам принцип сохранения через двойной вызов super …
romankrv
Как Вам такое решение? И можно узнать какие еще могут быть?
А проверять есть ли там id или нет это уже оптимизация.
Maddy
таки а варианты есть ? Если родительской модели не существует - ее надо породить …
Александр Кошелев
romankrv
Я в смысле спрашиваю про сам принцип сохранения через двойной вызов super …
Ответь сам себе на вопрос - зачем ты его два раза вызываешь?
romankrv
Daevaorn
зачем ты его два раза вызываешь
Для того, что бы еще раз уточнить мой вопрос и получить более правильный ответ, потому что ответы иногда идут не в контексте вопроса. (Я спрашиваю о принципе решения, а мне о оптимизации говорят).
Вот.
romankrv
Daevaorn
зачем ты его два раза вызываешь?
А как я понимаю запись должна существовать в базе в смысле экземпляр UserProfile должен быть уже в базе перед тем как можно было бы присоеденить к нему запись и таблицы GROUP, поэтому я вызываю дважды первая записывает без group вторая сохраняет связь с group, а иначе возникает ошибка
“'UserProfile' instance needs to have a primary key value before a many-to-many relationship can be used.”
А какие есть другие варианты?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB