Django GCBV UpdateView AttributeError - 类型对象'QuerySet'没有属性'_meta'

时间:2018-03-24 19:21:21

标签: django django-models django-views

我被困在这一点。我想要一个视图,使用名为UserPlanet(models.Model)的ForeignKey和其他一些视图来扩展User模型,这些视图通过OneToOneField扩展了UserPlanet模型。我的设置如下所示。如果我尝试通过网址到达视图,我会得到一个

  

/ game /中的AttributeError   type对象'QuerySet'没有属性'_meta'

我该如何解决这个问题?不幸的是我错过了一种方法。不幸的是,我在django文档中找不到任何内容

  

views.py:

from django.views import generic
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import UserPlanet, UserShips, UserDefense, UserBuildings


class IndexView(LoginRequiredMixin, generic.UpdateView):
    context_object_name = 'planets'
    template_name = 'game/home.html'
    fields = ('name', 'planet_size', 'free_fields', 'max_temperature', 'min_temperature', 'planet_galaxy',
              'planet_system', 'planet_position')

    def get_object(self, queryset=None):
        return self.request.user.userplanet_set.all()
  

models.py:

from django.db import models
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver


class UserPlanet(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(default='Heimatplanet', max_length=40)
    planet_size = models.PositiveSmallIntegerField(default=150)
    free_fields = models.PositiveSmallIntegerField(default=150)
    max_temperature = models.SmallIntegerField(default=80)
    min_temperature = models.SmallIntegerField(default=-20)
    planet_galaxy = models.PositiveSmallIntegerField(default=1)
    planet_system = models.PositiveSmallIntegerField(default=1)
    planet_position = models.PositiveSmallIntegerField(default=1)

    @receiver(post_save, sender=settings.AUTH_USER_MODEL)
    def create_user_planet(sender, instance, created, **kwargs):
        if created:
            UserPlanet.objects.create(user=instance)

class UserResources(models.Model):
    user_planet = models.OneToOneField(UserPlanet, related_name='user_resources', on_delete=models.CASCADE)
    minerals = models.IntegerField(default=1000)    # Mineralien
    food = models.IntegerField(default=0)           # Nahrung
    energy = models.IntegerField(default=0)         # Energie
    physics = models.IntegerField(default=0)        # Physik-Forschungspunkte
    engineering = models.IntegerField(default=0)    # Ingenieur-Forschungspunkte
    society = models.IntegerField(default=0)        # Gesellschafts-Forschungspunkte

    @receiver(post_save, sender=UserPlanet)
    def create_user_resources(sender, instance, created, **kwargs):
        if created:
            UserResources.objects.create(user_planet=instance)

1 个答案:

答案 0 :(得分:1)

UpdateView用于编辑单个对象。 get_object方法应返回单个对象,而不是查询集。

相关问题