1

ローカル環境でメザニン (pybb を使用) をセットアップしました。pybb は、いくつかのユーザー属性を定義するための抽象 Profile クラスを取得し、まだ使用していない場合に備えて Profile クラスも同梱しています。

最終的にユーザーを作成するサインアッププロセスを除いて、すべてが機能していますが、次のトレースバックが発生します。

http://pastebin.com/MFuBpc2A

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()

pybb の signal.py の user_saved():

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()

それに加えて、accounts/models.py に別の user_saved() があります。

@receiver(post_save, sender=User)
def user_saved(sender=None, instance=None, **kwargs):
    Profile.objects.get_or_create(**{str(user_field): instance})

両方を呼び出して 2 つのプロファイルを作成していますか?

助けてくれてありがとう!

4

1 に答える 1

0

mezzanine.accounts を使用していて、settings.py で AUTH_PROFILE_MODULE が設定されていると思われます。mezzanine.accounts.models のコードは、ユーザー モデルが保存されたときにプロファイルが生成されるようにシグナルを設定します。Tastypie を使用してユーザーとプロファイルを作成するときに、実際に同じ問題が発生しています。

于 2013-08-27T21:34:22.593 に答える