首页 > 解决方案 > 如何在我的 Django 应用程序中修复此属性错误?

问题描述

我正在开发一个 Django 应用程序,并且我创建了一个用户可以对电影投赞成票或反对票的地方,问题是当我点击这些按钮之一时,会出现此错误:

in likesDislikesPelicula
voto = Likes.objects.filter(usuario=request.Usuarioclte, pelicula__pk=idpelicula)

AttributeError: 'WSGIRequest' object has no attribute 'Usuarioclte'

我的意见.py

def detallesPelicula(request, pelicula_id):
    peliculas = get_list_or_404(Pelicula.objects.order_by('titulo'))
    pelicula = get_object_or_404(Pelicula, pk=pelicula_id)
    actor = get_list_or_404(Actor.objects)
    likes = conteolikes(pelicula)
    dislikes = conteodislikes(pelicula)
    context = {
        'pelicula': pelicula,
        'peliculas': peliculas,
        'likes': likes,
        'dislikes': dislikes
    }
    return render(request, 'detallesPelicula.html', context)

def conteolikes(pelicula):
        return pelicula.users_vote.filter(valor__gt=0).count()

def conteodislikes(pelicula):
        return pelicula.users_vote.filter(valor__lt=0).count()

@csrf_exempt
def likesDislikesPelicula(request):
      if request.method == 'POST':
          idpelicula= request.POST.get('idpelicula','')
          valor = request.POST.get('valor','')
          try:
             voto = Likes.objects.filter(usuario=request.Usuarioclte, pelicula__pk=idpelicula)
             print("Existe")
             print(voto)
          except  Likes.DoesNotExist:
             print("No existe")

我的models.py(简体)

class Usuarioclte(models.Model):
    nickname = models.CharField(max_length=50)
    contraseña = models.CharField(max_length=50)
    email = models.EmailField(max_length=50)

    def __str__(self):
        return self.nickname

class Likes(models.Model):
    #necesito que usuario y pelicula sean una calve compuesta
    #usuario_id= models.ForeignKey(User.id,on_delete= models.CASCADE)
    pelicula =  models.ForeignKey(Pelicula, on_delete=models.CASCADE, related_name = 'users_vote')
    usuarioclte = models.ForeignKey(Usuarioclte, on_delete=models.CASCADE, related_name= 
    'likes_and_dislikes')

    valor = models.IntegerField(default=0)
    def __str__(self):
        return self.usuarioclte.nickname

注意:用户是由 Django 身份验证系统获取和存储的,而不是在我创建的表中。

我已经看到这与MIDDLEWAREand有关系MIDDLEWARE_CLASSES,我试图改变它但仍然不起作用

我的中间件在setting.py

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.locale.LocaleMiddleware', #i18n
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

标签: pythondjangomiddleware

解决方案


推荐阅读