首页 > 解决方案 > 使用 django rest 框架发布时发生 AssertionError

问题描述

使用django rest framework 发帖时出现AssertionError 出现错误前的流程是这样的

  1. 我设置了 url 模式、视图和序列化程序类
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter()
router.register('post' , views.PostViewSet)
# print("router.urls : " , router.urls)

urlpatterns = [
    path('public/' , views.PublicPostListAPIView.as_view()),
    path('', include(router.urls)),
]


看法

from rest_framework import generics
from rest_framework.viewsets import ModelViewSet
from .serializers import PostSerializer
from .models import Post


class PublicPostListAPIView(generics.ListAPIView):
   queryset = Post.objects.filter(is_public=True)
   serializer_class = PostSerializer

class PostViewSet(ModelViewSet):
   queryset = Post.objects.all()
   serializer_class = PostSerializer

序列化程序.py

from django.contrib.auth import get_user_model
from rest_framework import serializers
from rest_framework.serializers import ModelSerializer
from instagram.models import Post

class AuthorSerializer(serializers.ModelSerializer):
   class Meta:
      model = get_user_model()
      fields = ['username','email']


class PostSerializer(ModelSerializer):
   author = AuthorSerializer()
   
   class Meta:
      model = Post
      fields = [
         'pk',
         'author',
         'message',
         'created_at',
         'updated_at',
         'is_public',

      ]
  1. 向以下地址索取
http://127.0.0.1:8000/post/

3.发布

在此处输入图像描述

4.错误发生如下

在此处输入图像描述

谢谢你让我知道如何解决它

标签: djangodjango-rest-framework

解决方案


假设保存author您在PostSerializer. 您可以像这样拥有自己的 create() 方法 -

def create(self, validate_data):
    data = validated_data
    author = data.get('author')
    # You can use author details here
    data.pop('author')
    return Post.objects.create(**data)
    

推荐阅读