无法在django-social-auth的管道方法中保存模型实例

时间:2013-06-17 09:45:23

标签: python django django-socialauth

今天我发现了一些奇怪的东西,我需要一个解释。

这是我目前的django-social-auth管道

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user',
    'social_auth.backends.pipeline.associate.associate_by_email',
    'social_auth.backends.pipeline.user.get_username',
    'social_auth.backends.pipeline.user.create_user',
    'social_auth.backends.pipeline.social.associate_user',
    'apps.main.pipeline.load_user_data',
    'social_auth.backends.pipeline.social.load_extra_data',
    'social_auth.backends.pipeline.user.update_user_details'
)

正如您所看到的,我有一个部分管道,load_user_data方法,问题所在:

def load_user_data(request, user, *args, **kwargs):
    x = User.objects.get(id=user.id)
    x.fid = 123
    x.save() # <-- Nothing changes in db . I even used force_update attribute.

    user.fid = 123
    user.save() # <-- it works.

所以,我无法理解为什么x.save()不起作用,我在这个问题上挣扎了好几个小时。

先谢谢。

1 个答案:

答案 0 :(得分:0)

def load_user_data(request, user, *args, **kwargs):
    x = User.objects.get_or_create(id=user.id) # this is looking for specyfic User, if nothing found it will create one. In your solution x wasnt User instance, so you cant save it.
    x.fid = 123
    x.save() # <-- Nothing changes in db . I even used force_update attribute.

    user.fid = 123 # User instance.
    user.save() # <-- it works.