2017-02-10 51 views
0

我伸出的Django的用户模型RelatedObjectDoesNotExist用户并没有配置文件由以下模型

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 用户没有配置文件

我应用了迁移和一切。

+1

错误明确统计该用户没有链接配置文件,你还需要创建配置文件对象。在db/django-admin里面检查你正在查看的用户对象是否有与之相关的配置文件。 – Darshan

回答

2

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

另一个更容易方法将检查配置文件是否存在,如果没有 - 创建它。 (在这种情况下,你将不得不作出这个领域不是强制性 你可以把它像这样:

def add_fav(request,pk): 
    post = get_object_or_404(Post, pk=pk) 
    form = PostForm(instance=post) 
    post = form.save(commit=False) 
    if not request.user.profile: 
     request.user.profile = Profile.objects.create() 
    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') 
相关问题