“QuerySet”对象没有属性

6
请问为什么在我的模板中显示“fav”时会出现这个错误消息?
QuerySet object has no attribute game_id

我尝试用 gameid_game 来替换 game_id,但是没有任何效果...

view.py

from django.contrib import messages
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render
from start.models import Games, FavoriteGames
import urllib, json

def view_recap(request):
    if request.user.is_authenticated():
        username = request.user.username
        id_user = request.user.id
        fav = FavoriteGames.objects.filter(user_id=id_user).game_id
        return render(request, 'recap.html', locals())
    else:
        from start.views import view_logoff
        from start.views import view_logon
        messages.add_message(request, messages.INFO, 'Vous devez être connecté pour accéder à cette page.')
        return redirect(view_logon)

models.py

from django.db import models
from django.conf import settings

# Create your models here.
class Games(models.Model):
    guid = models.CharField(max_length=100, unique=True, null=False, verbose_name="GUID")
    title = models.CharField(max_length=100, null=False, verbose_name="Titre")
    logo = models.CharField(max_length=100, null=True, blank=True, verbose_name="Logo")
    date = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name="Date de création")
    update = models.DateTimeField(auto_now=True, verbose_name="Dernière modification")
    def __str__(self):
        return self.title

class FavoriteGames(models.Model):
    game = models.ForeignKey('Games')
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
3个回答

9

当您循环遍历查询集时,可以访问每个实例的game_id。但无法在查询集上访问它。

您可以在视图中循环遍历查询集,

favs = FavoriteGames.objects.filter(user_id=id_user)

for fav in favs:
    game_id = game_id

或在模板中:

{% for fav in favs %}
  {{ fav.game_id }}
{% endfor %}

如果你只需要从查询集中获取game_ids,可以使用values_list

game_ids = FavoriteGames.objects.filter(user_id=id_user).values_list('game_id', flat=True)

感谢您,@Alasdair。 - user6089877

4

filter 将返回一个 Queryset。因此,应使用 get 而不是 filter。如果有多个对象,请使用 filter,但您需要循环遍历该 queryset 以获取每个对象。


1
筛选器返回多个结果,所以我需要它。而获取器只返回一个结果,因此我会收到错误提示,告诉我有太多的结果。 - user6089877
这是一个错误消息,带有get:get()返回了不止一个FavoriteGames - 它返回了2个! - user6089877
因此,将会有多个game_id。 因此,FavoriteGames.objects.filter(user_id=id_user).values_list(game_id, flat=True) 将获取所有 game_id - itzMEonTV
我遇到了一个问题:SyntaxError: invalid character in identifier。我不知道这是什么意思? - user6089877

0

根据文档,你可以通过在QuerySet上调用list()来强制执行它。例如:

entry_list = list(Entry.objects.all())

这将查询数据库并返回项目列表,而不是QuerySet。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接