Django JsonResponse:用户匹配查询不存在

问题描述

所以我尝试为我的模型制作一个ajax,但是它给了我一个不存在的匹配查询,这是完整的错误

Internal Server Error: /messages/notification/
Traceback (most recent call last):
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\core\handlers\exception.py",line 34,in inner
    response = get_response(request)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\core\handlers\base.py",line 115,in _get_response
    response = self.process_exception_by_middleware(e,request)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\core\handlers\base.py",line 113,in _get_response
    response = wrapped_callback(request,*callback_args,**callback_kwargs)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\views\generic\base.py",line 71,in view
    return self.dispatch(request,*args,**kwargs)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\contrib\auth\mixins.py",line 52,in dispatch
    return super().dispatch(request,**kwargs)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\views\generic\base.py",line 97,in dispatch
    return handler(request,**kwargs)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\views\generic\detail.py",line 106,in get
    self.object = self.get_object()
File "C:\Users\berna\Desktop\Python & Javascript\Web development\MiFamiliaEsUnDesastre\mifamiliaesundesastre\chat\views.py",line 26,in get_object
    obj,created    = Thread.objects.get_or_new(self.request.user,other_username)
File "C:\Users\berna\Desktop\Python & Javascript\Web development\MiFamiliaEsUnDesastre\mifamiliaesundesastre\chat\models.py",line 29,in get_or_new
    user2 = Klass.objects.get(username=other_username)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\db\models\manager.py",line 82,in manager_method
    return getattr(self.get_queryset(),name)(*args,**kwargs)
File "C:\Users\berna\AppData\Local\Programs\Python\python38-32\lib\site-packages\django\db\models\query.py",line 415,in get
    raise self.model.DoesNotExist(
django.contrib.auth.models.User.DoesNotExist: User matching query does not exist.
HTTP GET /messages/notification/ 500 [0.16,127.0.0.1:56012]

这也是我的代码: models.py

class ProfileImage(models.Model):
    """
    Profile model
    """
    user = models.OnetoOneField(
        verbose_name=_('User'),#to=settings.AUTH_USER_MODEL,to = User,related_name='profile',on_delete=models.CASCADE
    )
    avatar = models.ImageField(upload_to='profile_image')
    notifications = models.FloatField(default='0')

views.py

def notifications(request,user_id,**kwargs):
    user = User.objects.get(pk=user_id)
    user.profile.notifications = user.profile.notifications + 1
    user.save()
    return JsonResponse(data=user.profile.notifications,safe=False)

urls.py

path('messages/notification/',notifications)

我的html用于ajax调用

// Add the notification val
$.get('notification/')

有人告诉我,我没有用户,但是当我有用户时,我不知道发生了什么

解决方法

您需要将user_id发送到视图:

path('messages/notification/(?P<user_id>[a-zA-Z0-9/_\.-]*)',notifications)

和:

$.get('messages/notification/{{ user.pk }}')

更新

您必须知道其用户ID才能获得通知:

$.get('messages/notification/12234')

我假设您在某个地方有一个User模型?

此外,user_id作为字符串输入,因此需要int()

user = User.objects.get(pk=int(user_id))

或使用:

path('messages/notification/<int:user_id>',notifications)
,

所以对于后来看到这个的人来说,我要做的就是更改

path('messages/notification/',notifications)

收件人

url(r'^ajax/notification/$',notification),