Проблема в Django 5.0.2 и django_rest_framework
hi ребята у меня проблема с чтением sql данных из postgresql с помощью django. Я создал свою модель с помощью manage.py inspectdb из существующей базы данных.
моя модель:
from django.db import models
class Regions(models.Model):
code = models.CharField(unique=True, max_length=4)
capital = models.CharField(max_length=10)
name = models.TextField(unique=True)
class Meta:
managed = False
db_table = "regions"
Мой сериализатор:
from rest_framework import serializers
class RegionsSerializer(serializers.ModelSerializer):
class Meta:
model = "france.models.Regions"
fields = "__all__"
мой набор видов:
from rest_framework import viewsets
from rest_framework.response import Response
from .models import Regions
from .serializers import RegionsSerializer
class RegionsView(viewsets.ViewSet):
def list(self, request):
regions = Regions.objects.all()
serializer = RegionsSerializer(regions, many=True)
return Response(serializer.data)
и ошибка, которую я получаю:
AttributeError at /regions/
'str' object has no attribute '_meta'
Request Method: GET
Request URL: http://127.0.0.1:1000/regions/
Django Version: 5.0.4
Exception Type: AttributeError
Exception Value:
'str' object has no attribute '_meta'
Exception Location: C:\Projects\play_ground\python\django_one\venv\Lib\site-packages\rest_framework\utils\model_meta.py, line 35, in get_field_info
Raised during: france.views.RegionsView
Python Executable: C:\Projects\play_ground\python\django_one\venv\Scripts\python.exe
Python Version: 3.12.2
Python Path:
['C:\\Projects\\play_ground\\python\\django_one',
'C:\\Users\\safkh\\AppData\\Local\\Programs\\Python\\Python312\\python312.zip',
'C:\\Users\\safkh\\AppData\\Local\\Programs\\Python\\Python312\\DLLs',
'C:\\Users\\safkh\\AppData\\Local\\Programs\\Python\\Python312\\Lib',
'C:\\Users\\safkh\\AppData\\Local\\Programs\\Python\\Python312',
'C:\\Projects\\play_ground\\python\\django_one\\venv',
'C:\\Projects\\play_ground\\python\\django_one\\venv\\Lib\\site-packages']
Server time: Fri, 05 Apr 2024 08:19:46 +0000
Можете ли вы помочь мне с проблемой Thnx all
Сериализатор Meta
не может работать со строкой в качестве модели, а должен ссылаться на класс модели, так:
from france.models import Regions
from rest_framework import serializers
class RegionsSerializer(serializers.ModelSerializer):
class Meta:
model = Regions
fields = '__all__'
Примечание: обычно модели Django присваивается сингулярное имя, поэтому
Region
вместо.Regions
Если ввести имя модели следующим образом, ошибка не появится
Models.py
from rest_framework import serializers
from .models import Regions
class RegionsSerializer(serializers.ModelSerializer):
class Meta:
model = Regions
fields = "__all__"
Ошибка заключается в мета класса в вашей модели "Регионы", вот правильный подход
from rest_framework import serializers
from .models import Regions
class RegionsSerializer(serializers.ModelSerializer):
class Meta:
model = Regions
fields = "__all__"