'查询集'对象没有属性

时间:2017-05-31 12:29:04

标签: django django-1.11

请问我为什么在显示" fav"时收到此错误消息?在我的模板中

QuerySet object has no attribute game_id

我尝试将game_id替换为gameid_game,但没有...

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)

2 个答案:

答案 0 :(得分:1)

filter将返回Queryset。因此请使用get代替filter。如果有多个对象使用filter,但您需要遍历该查询集以获取每个对象。

答案 1 :(得分:1)

循环查询集时,您可以访问每个实例的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)