Не в состоянии обновить модели ManyToMany отношения django. получая ошибку, говоря, что поле моделей не было определено - PullRequest
0 голосов
/ 06 января 2020

Я просто запутался или устал от этого. когда этот код выполняется, он не всегда удаляет или добавляет, и когда он делает это, он не будет обновлять число подобных. Как я вижу в коде, когда пользователь найден в значении «Мне нравится», он должен удалить пользователя и уменьшить количество лайков и наоборот, похоже, он этого не делает. Мне также кажется, что я могу иметь только 1 лайк на всех фотографиях, поэтому мне придется удалить один лайк и добавить к другому, опять же, кажется, все это происходит случайным образом.

    def liked_pic(request):
        pdb.set_trace()
        if request.method == 'POST':
            pic = Pictures.objects.get(id=request.POST.get('pic_id'))
            user = UserModel.objects.get(email=request.user)
            liked = Pictures.objects.filter(likes=user).exists()
            print(pic.likes, liked)
            if liked:
                pdb.set_trace()
                pic.likes.remove(user)
                pdb.set_trace()
                pic.save()
            if not liked:
                pdb.set_trace()
                pic.likes.add(user)
                pic.save()
            picturecount = Pictures.objects.filter(likes).count()
            data = {'json_pic_id': pic.id,'likes': picturecount, 'user':liked}
            return JsonResponse(data)
            return HttpResponseRedirect('home')


class Pictures(models.Model):
    image = models.ImageField(upload_to='static/dataset/')
    author = models.ForeignKey(UserModel,on_delete=models.CASCADE)
    likes = models.ManyToManyField(UserModel,default=False,blank=True,related_name='likes')       
    description = models.CharField(default=False,max_length=200)


class UserModel(AbstractBaseUser,PermissionsMixin):
    sys_id = models.AutoField(primary_key=True, blank=True)
    email = models.EmailField(max_length=127, unique=True, null=False, blank=False)
    username = models.CharField(max_length=30, unique=True)

    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    objects = MyUserManager()

    USERNAME_FIELD = "email"
    # REQUIRED_FIELDS must contain all required fields on your User model,
    # but should not contain the USERNAME_FIELD or password as these fields will always be prompted for.
    REQUIRED_FIELDS = ['is_staff']








    pdb trace-----------------

    System check identified no issues (0 silenced).
    January 06, 2020 - 09:50:49
    Django version 3.0, using settings 
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CTRL-BREAK.
    **accounts.UserModel.None False**
    (Removed computer path information)
    **-> pic.likes.add(user)**
    (Pdb) continue
    [06/Jan/2020 09:51:05] "POST /liked/ HTTP/1.1" 200 44
    [06/Jan/2020 09:51:23] "GET /home/ HTTP/1.1" 200 3141
    [06/Jan/2020 09:51:23] "GET /media/static/dataset/00000016.png HTTP/1.1" 200 184935
    **accounts.UserModel.None True**
    (Removed computer path information)
    -> **pic.likes.remove(user)**
    (Pdb)
    (Pdb) continue





    -> pic.save()
    (Pdb) continue
    [06/Jan/2020 09:51:52] "POST /liked/ HTTP/1.1" 200 44

1 Ответ

0 голосов
/ 06 января 2020

Не зная более подробной информации о приложении, я думаю, что ваша логика c слегка отключена (очевидно, в противном случае у вас не будет проблем). Если вы пошагово набираете код liked_pic, вы делаете следующее:

  1. Получите мне фотографию, которая понравилась человеку
  2. Получите мне зарегистрированного пользователя
  3. Получить мне ВСЕ картинки, которые понравились пользователю
  4. Если пользователю понравилась ЛЮБАЯ картинка, то удалите отметку с этой картинки
  5. Если у пользователя есть отметки НУЛЕВ, добавьте отметку к текущей картинке

Я думаю, что вам, возможно, потребуется изменить строку liked на что-то вроде этого:

liked = Pictures.objects.filter(id=request.POST.get('pic_id'), likes=user).exists()

В частности, вам нужно проверить, понравился ли этот снимок пользователю, не все картинки. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...