![](/img/trans.png)
[英]Django request.data.get('submit') returns always none, even if name is provided as name=“submit”
[英]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.