Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django GCBV UpdateView AttributeError类型对象';QuerySet';没有属性'_meta&x27;_Django_Django Models_Django Views - Fatal编程技术网

Django GCBV UpdateView AttributeError类型对象';QuerySet';没有属性'_meta&x27;

Django GCBV UpdateView AttributeError类型对象';QuerySet';没有属性'_meta&x27;,django,django-models,django-views,Django,Django Models,Django Views,我被困在这一点上。我想要一个使用名为UserPlanet(models.model)的外键扩展用户模型的视图和一些其他视图,这些视图通过OneToOneField扩展UserPlanet模型。我的设置如下所示。如果我试图通过url访问视图,我会得到一个 属性错误在/游戏/ 类型对象“QuerySet”没有属性“\u meta” 我如何解决这个问题?不幸的是,我错过了一个方法。不幸的是,我在django文档中找不到任何东西 views.py: models.py: UpdateView用于编辑单个

我被困在这一点上。我想要一个使用名为
UserPlanet(models.model)
的外键扩展用户模型的视图和一些其他视图,这些视图通过OneToOneField扩展UserPlanet模型。我的设置如下所示。如果我试图通过url访问视图,我会得到一个

属性错误在/游戏/ 类型对象“QuerySet”没有属性“\u meta”

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

views.py:

models.py:


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

如果每个用户都可以拥有任意数量的UserPlanet类型的对象,您是否建议使用合适的视图?如果您正在编辑多个对象,则希望使用FormSet。Django中没有任何用于表单集的通用视图,但您可以查看Django额外视图。
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()
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)