【发布时间】:2021-06-13 04:55:26
【问题描述】:
我正在尝试创建列表和详细 api 视图。我有超过 100K 对象的数据库
模型.py
from django.db import models
# Create your models here.
class Banks(models.Model):
name = models.CharField(max_length=49, blank=True, null=True)
id = models.BigIntegerField(primary_key=True)
class Meta:
managed = False
db_table = 'banks'
class Branches(models.Model):
ifsc = models.CharField(primary_key=True, max_length=11)
bank = models.ForeignKey(Banks, models.DO_NOTHING, blank=True, null=True)
branch = models.CharField(max_length=250, blank=True, null=True)
address = models.CharField(max_length=250, blank=True, null=True)
city = models.CharField(max_length=50, blank=True, null=True)
district = models.CharField(max_length=50, blank=True, null=True)
state = models.CharField(max_length=26, blank=True, null=True)
class Meta:
managed = False
db_table = 'branches'
序列化器.py
from rest_framework import serializers
from .models import Branches, Banks
class BankSerializer(serializers.ModelSerializer):
class Meta:
model = Banks
fields= ['name', 'id']
class BranchSerializer(serializers.ModelSerializer):
bank = BankSerializer(many=True,read_only=True)
class Meta:
model = Branches
fields= ['ifsc','bank','branch','address','city','district','state']
views.py
from rest_framework import viewsets
from .serializers import BranchSerializer
from rest_framework import viewsets
class BankViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed.
"""
queryset = Branches.objects.all()
serializer_class = BranchSerializer
我尝试使用 .get_queryset()、.filter() 代替 .all() 但它仍然抛出错误
error datail
Request Method: GET
Request URL: http://127.0.0.1:8000/bankdetailapi/
Django Version: 3.2.3
Python Version: 3.9.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api',
'rest_framework',
'corsheaders',
'django_filters']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Python39\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Python39\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python39\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Python39\lib\site-packages\rest_framework\viewsets.py", line 125, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Python39\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Python39\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Python39\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Python39\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "C:\Python39\lib\site-packages\rest_framework\mixins.py", line 46, in list
return Response(serializer.data)
File "C:\Python39\lib\site-packages\rest_framework\serializers.py", line 745, in data
ret = super().data
File "C:\Python39\lib\site-packages\rest_framework\serializers.py", line 246, in data
self._data = self.to_representation(self.instance)
File "C:\Python39\lib\site-packages\rest_framework\serializers.py", line 663, in to_representation
return [
File "C:\Python39\lib\site-packages\rest_framework\serializers.py", line 664, in <listcomp>
self.child.to_representation(item) for item in iterable
File "C:\Python39\lib\site-packages\rest_framework\serializers.py", line 515, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "C:\Python39\lib\site-packages\rest_framework\serializers.py", line 663, in to_representation
return [
Exception Type: TypeError at /bankdetailapi/
Exception Value: 'Banks' object is not iterable
我还确保我没有打错字。我在堆栈上找到的大多数解决方案都是用 .get_queryset 或 .filter 替换 .all() 方法,这对我不起作用。 我在 admin.py 中注册了我的模型,它通过 admin 可见
【问题讨论】:
标签: python django postgresql django-rest-framework