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
Django类型错误-';模型库&x27;对象是不可编辑的_Django_Django Rest Framework - Fatal编程技术网

Django类型错误-';模型库&x27;对象是不可编辑的

Django类型错误-';模型库&x27;对象是不可编辑的,django,django-rest-framework,Django,Django Rest Framework,我已经搜索了关于这个主题的所有其他类似问题,但没有任何结果。希望这里有人能帮忙。它仅在尝试访问“api/订单”时失败 我有以下错误 Traceback (most recent call last): File "C:\Users\projects\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request)

我已经搜索了关于这个主题的所有其他类似问题,但没有任何结果。希望这里有人能帮忙。它仅在尝试访问“api/订单”时失败

我有以下错误

Traceback (most recent call last):
  File "C:\Users\projects\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\projects\venv\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\thard\projects\foreside\venv\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
    raise exc
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\mixins.py", line 46, in list
    return Response(serializer.data)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\serializers.py", line 760, in data
    ret = super().data
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\serializers.py", line 260, in data
    self._data = self.to_representation(self.instance)
  File "C:\Users\projects\venv\lib\site-packages\rest_framework\serializers.py", line 677, in to_representation
    return [

Exception Type: TypeError at /api/orders/
Exception Value: 'ModelBase' object is not iterable
这是相关文件

users.models.py user.url.py project.url.py user.permissions.py users.serializers.py settings.py的相关部分

...
INSTALLED_APPS = [
    ...,

    'rest_framework',
    'rest_framework.authtoken',
    'user',
]

AUTH_USER_MODEL = 'user.User'
...
user.views.py 。

类OrderViewSet(ModelViewSet):
queryset=Order.objects.all()

#代码的其余部分
查询集属性必须是
查询集
而不是模型类

类OrderViewSet(ModelViewSet):
queryset=Order.objects.all()

#你剩下的代码
你能分享一下关于
ModelBase
的代码吗?@ruddra我不知道在哪里可以找到ModelBase,但它在Django的某个地方,我什么也没写。任何我可以找到的建议,我可以用这些信息更新我的问题。从用户导入视图查看user.views.py
中引用的包含视图集的视图文件会很有帮助,你能分享关于
ModelBase
的代码吗?@ruddra我不知道在哪里可以找到ModelBase,但它在Django的某个地方,我什么也没写。任何我可以找到的建议,我可以用这些信息更新我的问题。如果能从用户导入视图查看user.views.py
中引用的包含视图集的视图文件,那将非常有帮助。我真不敢相信,我不得不发布一个问题来捕捉一个小的打字错误。我在这个项目上工作太久了。现在我可以前进了,非常感谢。我真不敢相信,我不得不发布一个问题来捕捉一个小的打字错误。我在这个项目上工作太久了。现在我可以前进了。
from rest_framework.routers import DefaultRouter
from django.urls import path, include

from user import views

router = DefaultRouter()
router.register('users', views.UserViewSet, basename='user-list')
router.register('login', views.LoginView, basename='login')
router.register('orders', views.OrderViewSet, basename='order-list')

urlpatterns = [
    path('', include(router.urls)),
    path('account/logout/', views.LogoutView.as_view(), name='logout')
]
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('user.urls'))
]
# from django.contrib.auth.models import Group
from rest_framework import permissions


ADMIN = 1
APPROVER = 2
TRADER = 3

def _is_in_role(user, role_name):
    try:
        return user.role == role_name
    except:
        return None

def _has_role_permission(user, required_roles):
    return any([_is_in_role(user, role_name) for role_name in required_roles])

class IsAdminUser(permissions.BasePermission):
    required_roles = [ADMIN,]

    def has_permission(self, request, view):
        has_role_permission = _has_role_permission(request.user, self.required_roles)
        return request.user and has_role_permission

    def has_object_permission(self, request, view, obj):
        has_role_permission = _has_role_permission(request.user, self.required_roles)
        return request.user and has_role_permission

class IsAdminOrApproverUser(permissions.BasePermission):
    required_roles = [ADMIN, APPROVER,]

    def has_permission(self, request, view):
        has_role_permission = _has_role_permission(request.user, self.required_roles)
        return request.user and has_role_permission

    def has_object_permission(self, request, view, obj):
        has_role_permission = _has_role_permission(request.user, self.required_roles)
        return request.user and has_role_permission

class IsAdminOrTraderUser(permissions.BasePermission):
    required_roles = [ADMIN, TRADER,]

    def has_permission(self, request, view):
        has_role_permission = _has_role_permission(request.user, self.required_roles)
        return request.user and has_role_permission

    def has_object_permission(self, request, view, obj):
        has_role_permission = _has_role_permission(request.user, self.required_roles)
        return request.user and has_role_permission
from rest_framework.serializers import ModelSerializer
from user.models import User, Order


class UserSerializer(ModelSerializer):
    class Meta:
        fields = ('id', 'first_name', 'last_name', 'username', 'password', 'role', 'email')
        model = User
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create(**validated_data)
        user.set_password(validated_data['password'])
        user.is_staff = True
        user.save()

        return user

class OrderSerializer(ModelSerializer):
    class Meta:
        fields = (
            'id', 'name', 'order_time', 'client', 
            'stock', 'qty', 'transaction_price', 'payment_method', 'settlement',
            'status', 'reason', 'modified_by',
            )
        model = Order
...
INSTALLED_APPS = [
    ...,

    'rest_framework',
    'rest_framework.authtoken',
    'user',
]

AUTH_USER_MODEL = 'user.User'
...
from django.shortcuts import render

from rest_framework import status
from rest_framework.authentication import TokenAuthentication
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.viewsets import ViewSet, ModelViewSet
from rest_framework.permissions import AllowAny
from user.permissions import IsAdminUser, IsAdminOrApproverUser, IsAdminOrTraderUser
from user.models import User, Order
from user.serializers import UserSerializer, OrderSerializer


class UserViewSet(ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    authentication_classes = [TokenAuthentication]

    def get_permissions(self):
        permission_classes = []
        if self.action == 'create':
            permission_classes = [IsAdminUser]
        elif self.action == 'list':
            permission_classes = [IsAdminUser]
        elif self.action == 'retrieve' or self.action == 'update' or self.action == 'partial_update':
            permission_classes = [IsAdminUser]
        elif self.action == 'destroy':
            permission_classes = [IsAdminUser]
        return [permission() for permission in permission_classes]


class LoginView(ViewSet):
    serializer_class = AuthTokenSerializer

    def create(self, request):
        return ObtainAuthToken().post(request)


class LogoutView(APIView):
    def get(self, request, format=None):
        request.user.auth_token.delete()
        return Response(status=status.HTTP_200_OK)

class OrderViewSet(ModelViewSet):
    queryset = Order
    serializer_class = OrderSerializer
    authentication_classes = [TokenAuthentication]
    
    def get_permissions(self):
        permission_classes = []
        if self.action == 'create':
            permission_classes = [IsAdminOrTraderUser]
        elif self.action == 'list':
            permission_classes = [IsAdminOrTraderUser]
        elif self.action == 'retrieve' or self.action == 'update':
            permission_classes = [IsAdminOrTraderUser]
        elif self.action == 'partial_update':
            permission_classes = [IsAdminOrApproverUser]
        elif self.action == 'destroy':
            permission_classes = [IsAdminUser]
        return [permission() for permission in permission_classes]
class OrderViewSet(ModelViewSet):
    queryset = Order.objects.all()
    # rest of your code