请我需要一些帮助,我正在django项目上工作..并且我在执行 python manage.py runserver 0.0.0.0:9000 时实现了viewset,序列化程序和模型类... strong>命令,当我尝试测试api时出现此错误:
AttributeError at /api/v1/csr/
'CsrViewSet' object has no attribute '_meta'
Request Method: POST
Request URL: http://192.168.56.108:18000/api/v1/csr/
Django Version: 3.0.4
Python Executable: /usr/local/bin/python
Python Version: 3.6.10
Python Path: ['/code', '/usr/local/lib/python36.zip', '/usr/local/lib/python3.6', '/usr/local/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/site-packages']
Server time: Tue, 19 May 2020 17:11:42 +0000
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'drf_yasg',
'multiselectfield',
'BerryPki.api']
Installed Middleware:
['BerryPki.middlewares.request.MultipleProxyMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'BerryPki.auth.user.CustomHeaderMiddleware',
'corsheaders.middleware.CorsMiddleware']
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
response = self.handle_exception(exc)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
self.raise_uncaught_exception(exc)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
raise exc
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
response = handler(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py", line 19, in create
self.perform_create(serializer)
File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py", line 24, in perform_create
serializer.save()
File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 207, in save
self.instance = self.update(self.instance, validated_data)
File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 979, in update
info = model_meta.get_field_info(instance)
File "/usr/local/lib/python3.6/site-packages/rest_framework/utils/model_meta.py", line 35, in get_field_info
opts = model._meta.concrete_model._meta
Exception Type: AttributeError at /api/v1/csr/
Exception Value: 'CsrViewSet' object has no attribute '_meta'
Request information:
USER: admin
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'bEAxUeHm8MHlX0MCYTilskZ45vMdcNfEMqi1qtHLiarPNSvK3h8UzKWAOzvSiQYd'
sessionid = '9vf0hpkxp1go0hl3iq7nqauq3vguvw1b'
这是我的模特班:
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles
from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.base_user import AbstractBaseUser
from django.utils.translation import gettext as _
from multiselectfield import MultiSelectField
from BerryPki.tools.helpers import *
from BerryPki.auth.permissions import HeaderBasedPermission
from django.conf import settings
matrix_roles = HeaderBasedPermission.load_matrix()
allowed_roles = list(set([elem.role for elem in matrix_roles])) # Convert to a unique list
LEXERS = [item for item in get_all_lexers() if item[1]]
LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS])
STYLE_CHOICES = sorted([(item, item) for item in get_all_styles()])
ROLE_CHOICES = sorted([(item, item) for item in allowed_roles])
class Csr(models.Model):
score = models.CharField(max_length=255)
class Meta:
managed = False
def send_csr(self):
# print('this is a test of the api ', self.score)
# self.score = 'this is a test of the api ', self.score
result = {"score" : "test test "}
return result
这是我的viewset类:
from rest_framework import viewsets
from BerryPki.api.models import Csr
from BerryPki.api.serializers import CsrSerializer
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from BerryPki.auth.permissions import HeaderBasedPermission
from BerryPki.auth.permissions import Rules
from rest_framework import status
from BerryPki.tools.helpers import *
from django_filters.rest_framework import DjangoFilterBackend
from BerryPki.base.viewsets import BaseViewSet
@decorate_all_functions(log_on_call)
class CsrViewSet(BaseViewSet):
"""
Just for test : return hardcoded compliance score value.
"""
queryset = Csr.objects.all()
serializer_class = CsrSerializer
http_method_names = ['post']
最后是我的序列化器类:
from rest_framework import fields,serializers
from datetime import datetime
from django.conf import settings
import os
from BerryPki.tools.helpers import *
from BerryPki.auth.permissions import HeaderBasedPermission
from BerryPki.api.models import Csr
matrix_roles = HeaderBasedPermission.load_matrix()
allowed_roles = list(set([elem.role for elem in matrix_roles])) # Convert to a unique list
ROLE_CHOICES = sorted([(item, item) for item in allowed_roles])
@decorate_all_functions(log_on_call)
class CsrSerializer(serializers.ModelSerializer):
"""
Just for test
"""
class Meta:
fields = '__all__'
model = Csr
def create(self, validated_data):
"""
List a hadcoded value.
"""
csr = Csr()
csr.score = validated_data['score']
csr.send_csr()
return csr
请谁能帮助我解决这个问题..我是django的新手,我不明白为什么这会导致..非常感谢