Проблема в том, что объект «метод» не может быть повторен. Я делаю небольшое приложение Django

#json #python-3.x #django #django-rest-framework

Вопрос:

Вот ошибка, когда я перехожу на страницу сотрудников (сотрудники-это модель):

 TypeError at /employees/
'method' object is not iterable
Request Method: GET
Request URL:    http://127.0.0.1:8000/employees/
Django Version: 3.2
Exception Type: TypeError
Exception Value:    
'method' object is not iterable
Exception Location: C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkserializers.py, line 677, in to_representation
Python Executable:  C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvScriptspython.exe
Python Version: 3.9.4
Python Path:    
['C:\Users\USER\PycharmProjects\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject1\health_recommender_final',
 'C:\Users\USER\PycharmProjects\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject1\health_recommender_final',
 'C:\Program Files\JetBrains\PyCharm '
 '2021.1.1\plugins\python\helpers\pycharm_display',
 'C:\Users\USER\AppData\Local\Programs\Python\Python39\python39.zip',
 'C:\Users\USER\AppData\Local\Programs\Python\Python39\DLLs',
 'C:\Users\USER\AppData\Local\Programs\Python\Python39\lib',
 'C:\Users\USER\AppData\Local\Programs\Python\Python39',
 'C:\Users\USER\PycharmProjects\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject1\health_recommender_final\venv',
 'C:\Users\USER\PycharmProjects\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject\djangoProject1\health_recommender_final\venv\lib\site-packages',
 'C:\Program Files\JetBrains\PyCharm '
 '2021.1.1\plugins\python\helpers\pycharm_matplotlib_backend']
Server time:    Fri, 18 Jun 2021 01:49:34  0000
 

Мои основные файлы-сериализаторы и модели.

 from rest_framework import serializers
from rest_framework import Person


class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        models = Person
        fields = '__all__'


from django.db import models

# Create your models here.
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User


class Person(models.Model):
    EDUCATION_CHOICES = (
        ('NA', 'NONE'),
        ('SSC', 'SSC'),
        ('HSC', 'HSC'),
        ('undergraduate', 'UNDERGRADUATE'),
        ('graduate', 'POSTGRADUATE'),
        ('Further Studies or PhD', 'FURTHER/PhD'),
    )

    DIET = (
        ('Vegetarian', 'VEG'),
        ('Omnivore', 'OMNI'),
        ('Fish', 'FISH'),
    )

    EXERCISE = (
        ('na', 'NA'),
        ('yes', 'YES'),
        ('no', 'NO'),
    )

    name = models.CharField(max_length=250,default="")
    education_details = models.CharField(max_length=150, choices=EDUCATION_CHOICES, default='NA')
    diet = models.CharField(max_length=80, choices=DIET, default='VEG')
    exercise = models.CharField(max_length=80, choices=EXERCISE, default='NA')

    class Meta:
        ordering = ('-name',)

    @property
    def __str__(self):
        return self.name
 

Так что же мне теперь делать? Я думаю, что метод, который нельзя повторить, подходит, потому что я где-то что-то упустил, где это может быть?

Я пытаюсь создать небольшое приложение, которое при использовании имеет вышеуказанный ввод в качестве модели, которая возвращает файл JSON. После этого я бы манипулировал файлом JSON с помощью некоторых программ для создания рекомендаций по здоровью, основанных на выборе образа жизни. Может ли кто — нибудь сказать мне, где я ошибаюсь и как я могу выполнить манипуляции с JSON, чтобы упростить отправку для создания рекомендаций??

 views.py
from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Person
from .serializers import PersonSerializer
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Person
from .serializers import PersonSerializer


class PersonList(APIView):
    def get(self, request):
        person1 = Person.objects.all
        serializer = PersonSerializer(person1, many=True)
        return Response(serializer.data)

    def post(self):
        pass
 

urls.py

 from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns

from healthrecomm import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('employees/', views.PersonList.as_view())


]


System check identified no issues (0 silenced).
June 18, 2021 - 07:49:18
Django version 3.2, using settings 'health_recommender_final.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[18/Jun/2021 07:49:34] "GET /employees HTTP/1.1" 301 0
Internal Server Error: /employees/
Traceback (most recent call last):
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
    response = get_response(request)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesdjangocorehandlersbase.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesdjangoviewsdecoratorscsrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesdjangoviewsgenericbase.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkviews.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkviews.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkviews.py", line 476, in raise_uncaught_exception
    raise exc
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkviews.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalhealthrecommviews.py", line 23, in get
    return Response(serializer.data)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkserializers.py", line 760, in data
    ret = super().data
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkserializers.py", line 260, in data
    self._data = self.to_representation(self.instance)
  File "C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalvenvlibsite-packagesrest_frameworkserializers.py", line 677, in to_representation
    return [
TypeError: 'method' object is not iterable
[18/Jun/2021 07:49:34] "GET /employees/ HTTP/1.1" 500 105485
Not Found: /favicon.ico
[18/Jun/2021 07:49:35] "GET /favicon.ico HTTP/1.1" 404 2123
C:UsersUSERPycharmProjectsdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProjectdjangoProject1health_recommender_finalhealthrecommmodels.py changed, reloading.
Watching for file changes with StatReloader
 

Комментарии:

1. вы также должны включить свои мнения в сообщение.

2. Можете ли вы заменить содержимое страницы ошибок Django полной обратной записью с консоли/входа в свой вопрос? Добавление вашего представления и URL-адресов также было бы полезно.

3. К вашему сведению: __str__ метод в вашей модели не должен быть @property

4. использовать Person.objects.all() вместо Person.objects.all

5. Человек.предметы. all-это метод, который сам по себе не является повторяемым, и вы передали метод конструктору сериализатора вместо повторяемого объекта.

Ответ №1:

Попробуйте удалить @property из модели человека

Ответ №2:

views.py

неправильно это :

 class PersonList(APIView):
    def get(self, request):
        # this person1 line is mistake ,
        person1 = Person.objects.all # this all()
        # ok ?                   ^^^
        serializer = PersonSerializer(person1, many=True)
        return Response(serializer.data)

    def post(self):
        pass
 

.
правильно:
.

 class PersonList(APIView):
    def get(self, request):
        # solution is this line
        person1 = Person.objects.all() # this all()
        # ok ?                   ^^^
        serializer = PersonSerializer(person1, many=True)
        return Response(serializer.data)

    def post(self):
        pass
 

это исправит проблему