Django GCBV UpdateView AttributeError - объект типа QuerySet не имеет атрибута _meta

Я застрял на этом этапе. Мне нужно представление, расширяющее модель 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)
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
100
1

Ответы 1

UpdateView предназначен для редактирования одного объекта. Метод get_object должен возвращать один объект, а не набор запросов.

Есть ли у вас предложение для подходящего вида, если у каждого пользователя может быть любое количество объектов типа UserPlanet?

MK87 24.03.2018 21:05

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

Alasdair 24.03.2018 23:58

Другие вопросы по теме