Я застрял на этом этапе. Мне нужно представление, расширяющее модель User с помощью ForeignKey с именем UserPlanet(models.Model) и некоторых других представлений, расширяющих модель UserPlanet на OneToOneField. Мои настройки выглядят так, как указано ниже. Если я попытаюсь перейти к просмотру по URL-адресу, я получу
AttributeError at /game/ type object 'QuerySet' has no attribute '_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)





UpdateView предназначен для редактирования одного объекта. Метод get_object должен возвращать один объект, а не набор запросов.
Если вы редактируете несколько объектов, вы хотите использовать наборы форм. В Django нет общих представлений для наборов форм, но вы можете посмотреть django-extra-views.
Есть ли у вас предложение для подходящего вида, если у каждого пользователя может быть любое количество объектов типа UserPlanet?