AttributeError: объект 'ModelName' не имеет атрибута 'get', если response.get("X-Frame-Options") не None:
Я пытаюсь получить список сценариев
Я не уверен, почему django выдает эту ошибку, может ли кто-нибудь определить, если что-то не так.
Модель
class Script(models.Model):
name = models.CharField(max_length=100)
script = models.TextField()
def __str__(self):
return self.name
Serializer
class ScriptSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
name = serializers.CharField(read_only=True)
script = serializers.CharField(read_only=True)
просмотр;
@api_view(['GET'])
def scripts(request):
scripts = Script.objects.all()
serializer = ScriptSerializer(scripts, many=True)
return Response(serializer.data)
но когда я вызываю это представление, я получаю эту ошибку
Internal Server Error: /api/v1/seo/scripts
Traceback (most recent call last):
File "E:\folder\venv\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
File "E:\folder\venv\lib\site-packages\django\utils\deprecation.py", line 136, in __call__
response = self.process_response(request, response)
File "E:\folder\venv\lib\site-packages\django\middleware\clickjacking.py", line 27, in process_response
if response.get("X-Frame-Options") is not None:
AttributeError: 'Script' object has no attribute 'get'
Я также видел ответы, связанные с этим вопросом в Stackoverflow, но не смог воспроизвести решение. И также этот подход не нов для меня, я использовал этот тип функций по всему проекту. Но теперь я удивлен, почему это происходит.
Редактирование: Импорт
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import ScriptSerializer
from .models import Script
урлы
from django.urls import path
from . import views as views
app_name = "seo"
urlpatterns = [
path('scripts', views.Script, name='scripts'),
]
Я считаю, что проблема здесь в столкновении имен. Посмотрите внимательнее на это:
@api_view(['GET'])
def scripts(request):
scripts = Script.objects.all()
serializer = ScriptSerializer(scripts, many=True)
Функция названа scripts, а затем это имя переназначено scripts = Script.objects.all(). Это может привести к действительно неожиданному поведению
Попробуйте переименовать вашу локальную переменную. Например:
@api_view(['GET'])
def scripts(request):
script_items = Script.objects.all()
UPD после urls.py добавлено:
Он должен указывать на представление функции, т.е. на модель:
path('scripts', views.scripts, name='scripts'),