簡體   English   中英

Django POST 請求:我總是以錯誤 400 告終,並且請求中提供的數據不被接受

[英]Django POST Request: I always end up with an Error 400 and the provided data in the request doesn't get accepted

我有一個 django 項目,其中包含以下(與此問題相關)應用程序:課程、類別、用戶(教師)和子類別。

使用 Django REST 框架,我試圖覆蓋 perform_create() 方法,以便在創建新實例時已經占用了課程模型的某些字段。 我希望“教師”字段為當前用戶,“類別”字段為類別的實例,與請求數據“類別”等匹配。

現在,每當我執行代碼時,最終都會出現 400 錯誤,並且它表示教師、類別、子類別等“需要此字段”。

請在下面找到代碼:

課程模式

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

課程視圖

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM