Возвращено несколько объектов (профилей) при создании учетной записи в мезонинном проекте
У меня есть рабочий мезонин (с pybb) в моей локальной среде. У pybb есть абстрактный класс Profile для определения некоторых пользовательских атрибутов, а также поставляется класс Profile на тот случай, если вы его еще не используете.
Все работает, кроме процесса регистрации, который заканчивается созданием пользователя, но приводит к следующей трассировке:
Я думал, что pybbMiddleware может быть проблемой. (Как я создаю 2 профиля?)
class PybbMiddleware(object):
def process_request(self, request):
if request.user.is_authenticated():
try:
# Here we try to load profile, but can get error
# if user created during syncdb but profile model
# under south control. (Like pybb.Profile).
profile = request.user.get_profile()
except ObjectDoesNotExist:
# Ok, we should create new profile for this user
# and grant permissions for add posts
user_saved(request.user, created=True)
profile = request.user.get_profile()
language = translation.get_language_from_request(request)
if not profile.language:
profile.language = language
profile.save()
if profile.language and profile.language != language:
request.session['django_language'] = profile.language
translation.activate(profile.language)
request.LANGUAGE_CODE = translation.get_language()
User_saved() в файлах сигналов pybb:
def user_saved(instance, created, **kwargs):
if not created:
return
try:
add_post_permission = Permission.objects.get_by_natural_key('add_post', 'pybb', 'post')
add_topic_permission = Permission.objects.get_by_natural_key('add_topic', 'pybb', 'topic')
except ObjectDoesNotExist:
return
instance.user_permissions.add(add_post_permission, add_topic_permission)
instance.save()
if settings.AUTH_PROFILE_MODULE == 'pybb.Profile':
from models import Profile
Profile(user=instance).save()
и, кроме того, у меня есть еще один user_saved() в accounts/models.py:
@receiver(post_save, sender=User)
def user_saved(sender=None, instance=None, **kwargs):
Profile.objects.get_or_create(**{str(user_field): instance})
Это вызывает оба и таким образом создает 2 профиля?
Спасибо за любую помощь!
1 ответ
Я подозреваю, что вы используете mezzanine.accounts и AUTH_PROFILE_MODULE установлен в settings.py. Код в mezzanine.accounts.models устанавливает сигнал так, что при сохранении модели пользователя создается профиль. Я на самом деле сталкиваюсь с той же проблемой при создании пользователя и профиля с использованием tastypie.