#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
это исправит проблему