django - 无法更新模型 ManyToMany 关系 django。收到一条错误消息,指出尚未定义模型字段
问题描述
我只是对此感到困惑或厌倦。当此代码运行时,它并不总是删除或添加,并且当它运行时,它不会更新点赞数。正如我看到的代码,当用户在喜欢的值中找到时,它应该删除用户并减少喜欢,反之亦然,它似乎没有这样做。我似乎也只能在所有图片中获得 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
解决方案
在不了解有关该应用程序的更多详细信息的情况下,我认为您的逻辑略有偏差(显然,否则您不会有问题)。如果您单步执行您的liked_pic
代码,您将执行以下操作:
- 把那个人喜欢的照片给我
- 获取我的登录用户
- 给我所有用户喜欢的图片
- 如果用户喜欢任何图片,则从这张图片中删除喜欢
- 如果用户点赞为零,则将点赞添加到当前图片
我认为您可能需要将您的liked
线路更改为以下内容:
liked = Pictures.objects.filter(id=request.POST.get('pic_id'), likes=user).exists()
更具体地说,您需要检查用户是否喜欢那张图片,而不是所有图片。希望有帮助。
推荐阅读
- python - LibreOffice Calc 的 Python 脚本中的公式问题
- excel - 导入 12 张工作表时从 Pandas.read_excel() 访问特定的 DataFrame
- javascript - 我在 Zapier 的 Action 响应中得到一个 NULL 对象。这导致操作失败并导致 Zapier 不更新身份验证令牌
- python - 在url中添加参数
- wordpress - Wordpress iFrame 中的 Acumatica 屏幕
- python - Do I need to import Numpy to use Pandas?
- python - 如何使用 pip asciimatics 在 TUI 中显示“Hello world”
- javascript - 有没有办法在 JS 中获取所有已注册的协议处理程序?
- relative-path - 如何引用 Docusaurus docs 目录之外的文档?
- powershell - 如何在 Powershell 中使用 Get-Date 的 .AddMonths 方法