2017-02-10 4 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

Возможно, у вас нет объекта Profile. вам нужно создать профиль для уже существующих пользователей (правильный способ сделать это будет в процессе миграции), а также создать профиль пользователя всякий раз, когда будет создан новый пользователь.

еще один проще подход должен был проверить, существует ли профиль, а если нет - создать его. . (В этом случае, вы должны будете сделать это поле не обязательное вы могли бы сделать это следующим образом:

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') 
Смежные вопросы