我被困在这一点。我想要一个视图,使用名为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)
答案 0 :(得分:1)
UpdateView
用于编辑单个对象。 get_object
方法应返回单个对象,而不是查询集。