Django POST 请求:我总是以错误 400 结束,并且请求中提供的数据未被接受



我有一个django项目与以下(与此问题相关)应用程序:课程,类别,用户(教师)&子类别。

使用Django REST框架,我试图覆盖perform_create()方法,以便在创建新实例时课程模型的某些字段已经被占用。我喜欢"老师"。字段中的"类别"为当前用户;字段作为类别的实例,它与请求数据"类别"等相匹配。

现在每当我执行代码时,我都以一个400 Error结束,它说&;This field is required &;对于教师,类别,子类别等

请查看下面的代码:

<<p>课程模型/strong>
class Course(models.Model):
name = models.CharField(max_length=100)
description = models.TextField(max_length=500)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
premium_only = models.BooleanField(default=False)
duration = models.IntegerField(default=0)
level = models.CharField(max_length=100)
# Relationships
category = models.ForeignKey(
to=Category, related_name='courses', on_delete=models.CASCADE)
sub_category = models.ForeignKey(
to=SubCategory, related_name='courses', on_delete=models.CASCADE)
teacher = models.ForeignKey(
to=User, related_name='courses', on_delete=models.CASCADE)
marked_as_favorite_by = models.ManyToManyField(
to=User, related_name='favorite_courses', blank=True, null=True, default=None)
def __str__(self):
return self.name
<<p>课程意见/strong>
class CreateCourseView(CreateAPIView):
queryset = Course.objects.all()
serializer_class = CourseSerializer
permission_classes = [IsAuthenticated]
def perform_create(self, serializer):
categories = Category.objects.all()
sub_categories = SubCategory.objects.all()
teacher = self.request.user
category = categories.get(name=self.request.data['category'])
sub_category = sub_categories.get(
name=self.request.data['sub_category'])
serializer.save(teacher=teacher, category=category,
sub_category=sub_category)

序列化器

from user.nested_serializers.teacher_for_course import CourseTeacherSerializer
from rest_framework import serializers
from .models import Course
from category.nested_serializers.for_course import CourseCategorySerializer
from sub_category.nested_serializers.for_course import CourseSubCategorySerializer

class CourseSerializer(serializers.ModelSerializer):
category = CourseCategorySerializer()
sub_category = CourseSubCategorySerializer()
teacher = CourseTeacherSerializer()
marked_as_favorite_by = CourseTeacherSerializer(many=True)
class Meta:
model = Course
fields = ('id', 'name', 'description', 'created_at',
'updated_at', 'premium_only', 'duration', 'level', 'category', 'sub_category', 'teacher', 'marked_as_favorite_by')

这些信息足以让你帮助我吗?

提前感谢!

我应该在序列化器中使用read_only = True。这个工作!

class CourseSerializer(serializers.ModelSerializer):
category = CourseCategorySerializer(read_only=True)
sub_category = CourseSubCategorySerializer(read_only=True)
teacher = CourseTeacherSerializer(read_only=True)
marked_as_favorite_by = CourseTeacherSerializer(read_only=True, many=True)
class Meta:      
model = Course
fields = ['id', 'name', 'description', 'created_at',
'updated_at', 'premium_only', 'duration', 'level', 'teacher', 'marked_as_favorite_by', 'category', 'sub_category']
read_only_fields = ['teacher', 'marked_as_favorite_by', 'category', 'sub_category']

最新更新