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)