RelatedObjectDoesNotExist用户,没有配置文件

时间:2017-02-10 18:24:11

标签: django

我正在通过以下模型扩展Django的用户模型

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    favorites = models.ManyToManyField(Post, related_name='favorited_by')

当我点击调用以下视图的按钮时,

def add_fav(request,pk):
    post = get_object_or_404(Post, pk=pk)
    form = PostForm(instance=post)
    post = form.save(commit=False)
    userprofile=request.user.profile
    with userprofile.favorites.all as favorite_posts:
        for post in post_list:
            if post not in favorite_posts:
                userprofile.favorites.add(post)
    userprofile.save() 
    return redirect('post_list')

我收到错误RelatedObjectDoesNotExist 用户没有个人资料

我应用了迁移和所有内容。

2 个答案:

答案 0 :(得分:2)

您可能没有Profile对象。您需要为现有用户创建配置文件(正确的方式是在迁移中),并在创建新用户时创建用户配置文件。

另一种更简单的方法是检查配置文件是否存在,如果不存在 - 创建它。 (在这种情况下,您必须使此字段不是强制性的。 你可以这样做:

list(FILTER

答案 1 :(得分:0)

这发生在我身上一次,我浪费了一天的调试时间。 就我而言,该应用程序名为“users”。 长话短说,在我的 settings.py 和 INSTALLED_APPS 下,我有:

MY_APPS = [
    .....
    'blog',
    'users',
    .....
]
INSTALLED_APPS.extend(MY_APPS)

改为:

MY_APPS = [
    .....
    'blog',
    'users.apps.UsersConfig',
    .....
]
INSTALLED_APPS.extend(MY_APPS)

成功了。

我仍然不知道为什么,但它工作得很好('users' 中的 INSTALLED_APPS)。用户已创建,用户配置文件已创建。信号在发射。突然之间,它停止了工作。很高兴我修好了。把我逼疯了!