Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';财产';对象没有属性';复制';-在Django Rest中尝试获取对象列表时_Python_Django_Django Rest Framework_Serialization - Fatal编程技术网

Python 属性错误:';财产';对象没有属性';复制';-在Django Rest中尝试获取对象列表时

Python 属性错误:';财产';对象没有属性';复制';-在Django Rest中尝试获取对象列表时,python,django,django-rest-framework,serialization,Python,Django,Django Rest Framework,Serialization,为了练习我的Django技能,我尝试制作一个简单的模块,该模块应该或多或少像Django中的管理站点一样工作。它应该从应用程序中收集所有模型,列出它们,并显示每个模型中的每个对象。我尝试使用Django Rest框架 这是我的观点。我有两种观点。api_根目录侦听所有模型,但它也将params-models_名称发送到另一个视图“model_view”。ModelViewSet应该列出特定模型中的所有对象 class ModelsViewSet(viewsets.ModelViewSet):

为了练习我的Django技能,我尝试制作一个简单的模块,该模块应该或多或少像Django中的管理站点一样工作。它应该从应用程序中收集所有模型,列出它们,并显示每个模型中的每个对象。我尝试使用Django Rest框架

这是我的观点。我有两种观点。api_根目录侦听所有模型,但它也将params-models_名称发送到另一个视图“model_view”。ModelViewSet应该列出特定模型中的所有对象

class ModelsViewSet(viewsets.ModelViewSet):
    def get_serializer(self, *args, **kwargs):
        serializer_name = '{model_name}Serializer'.format(
            model_name=self.kwargs.get('name').split(".")[1]
        )
        return getattr(serializers, serializer_name)

    def get_model(self):
        """methods return model based on name kwargs

        :return:
        """
        return apps.get_model(self.kwargs.get('name'))

    def get_queryset(self):
        return self.get_model().objects.all()

    def get_object(self):
        return self.get_model().objects.get(pk=self.kwargs.get('pk'))


@api_view(['GET'])
def api_root(request, format=None):
    return Response([reverse(
             viewname='model_view',
             kwargs={'name': i._meta.label}) for i in apps.get_models()])
这是我的serializers.py。在此文件中,序列化程序类是动态生成的。每个类都是基于django.apps中的模型构建的

from django.apps import apps
from rest_framework import serializers
from admin_site import serializers as m
from . import models


app_models = apps.get_models()

for item in app_models:

    name = "{}Serializer".format(item.__name__)

    class Meta(type):
        model = item
        fields = '__all__'

    m.__dict__[name] = type(name, (serializers.ModelSerializer,), {})
    m.__dict__[name].__metaclass__ = Meta
最后是我的my_app.url.py文件。我认为问题可能在于ModelSetView没有使用DefaultRouter()注册,但另一方面,我需要将param传递给urlpattern。我不知道

urlpatterns = [
    url(r'^$', views.api_root),
    url(r'^model/(?P<name>[\w\-\.]+)/$',
        views.ModelsViewSet.as_view({'get': 'list', 'put':'update'}), name='model_view'),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))

有什么线索可以帮助我完成任务并避免这个错误吗?

重写
get\u serializer\u class()
not
get\u serializer()
重写
get\u serializer\u class()
not
get\u serializer()

Traceback (most recent call last):
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/django/core/handlers/base.py", line 217, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/django/core/handlers/base.py", line 215, in _get_response
    response = response.render()
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/django/template/response.py", line 107, in render
    self.content = self.rendered_content
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/rest_framework/response.py", line 72, in rendered_content
    ret = renderer.render(self.data, accepted_media_type, context)
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/rest_framework/renderers.py", line 716, in render
    context = self.get_context(data, accepted_media_type, 
renderer_context)
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/rest_framework/renderers.py", line 650, in get_context
    raw_data_put_form = self.get_raw_data_form(data, view, 'PUT', 
request)
  File "/home/wojjak/Projects/envs/taskenvv/lib/python3.6/site-
packages/rest_framework/renderers.py", line 565, in get_raw_data_form
    data = serializer.data.copy()
AttributeError: 'property' object has no attribute 'copy'