Django: сохранение пользователя в ManyToManyField - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь разрешить аутентифицированным пользователям ставить лайк статье.

models.py:

class NewsItem(models.Model):
  heading = models.CharField(max_length=550, blank = False)
  news_body = models.TextField(blank = True)
  ...
  likes = models.ManyToManyField(User, blank = True)

views.py:

def newsitem_slug(request, newsitem_id, slug):
  newsitem = get_object_or_404(NewsItem, pk=newsitem_id, active = 1)
  ...

  # Processing Likes:
  if request.method == 'POST' and request.POST.get('newsitem_like'):
    form = LikesForm(request.POST, instance=newsitem)
      if form.is_valid():
        user = User(id=request.user.id)
        if user not in newsitem.likes.all():
            newsitem.likes.add(user)
        else:
            newsitem.likes.remove(user)
  ...

forms.py:

class LikesForm(ModelForm):
    class Meta:
        model = NewsItem
        fields = ['likes',]

Я получаю ошибку при добавлении подобного:

Cannot add "<User: >": instance is on database "default", value is on database "None"

Рекомендуется сохранить как пользователя, так и статью перед использованием метода add, но в моем случае он не работает.

Что с этим можно сделать?

1 Ответ

1 голос
/ 27 апреля 2020

Вы создаете объект User. Если вы намеревались это сделать, сохраните его перед использованием. Если вы намеревались получить объект User по идентификатору, используйте менеджер моделей .get(pk=request.user.id), чтобы получить его.

...