[英]Django Rest Framework - how to pass kwargs to model.save()?
[英]Cannot pass the value from kwargs in POST method django rest framework
當我嘗試使用 perform_create 方法傳遞 course_id 的值時,它顯示此錯誤...
ValueError at /course/9f77f4a9-0486-44f3-8bea-4908adb7d3ca/add/
Cannot assign "'9f77f4a9-0486-44f3-8bea-4908adb7d3ca'": "Content.course_id" must be a "Course" instance.
Request Method: POST
Request URL: http://127.0.0.1:8000/course/9f77f4a9-0486-44f3-8bea-4908adb7d3ca/add/
Django Version: 2.2.5
Exception Type: ValueError
Exception Value:
Cannot assign "'9f77f4a9-0486-44f3-8bea-4908adb7d3ca'": "Content.course_id" must be a "Course" instance.
這是我的views.py
class ContentAdd(generics.ListAPIView, mixins.CreateModelMixin):
queryset = Content.objects.all()
serializer_class = ContentSerializer
def post(self, request, *args, **kwargs):
saveData = self.create(request, *args, **kwargs)
response_data = {}
response_data["data"] = saveData.data
response_data["errors"] = {}
return Response(response_data, status=status.HTTP_201_CREATED)
def perform_create(self, serializer):
id = self.kwargs.get("course_id")
serializer.save(course_id=id)
這是我的 serializers.py
class ContentSerializer(serializers.ModelSerializer):
class Meta:
model = Content
fields = [
'title',
'description',
'serial',
'file',
'file_type',
]
這是我的model.py
class Content(models.Model):
content_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
course_id = models.ForeignKey(Course, on_delete=models.CASCADE, related_name="content_course_id", to_field='course_id')
file = models.FileField(upload_to=gen_pic_path,blank=False, null=False)
file_type = models.BooleanField(blank=False, null=False) # content/attachment
serial = models.IntegerField()
title = models.CharField(max_length=200)
description = models.TextField()
這是網址路徑
path('course/<course_id>/add/', ContentAdd.as_view()),
您需要獲取Course
以保存Content
def perform_create(self, serializer):
id = self.kwargs.get("course_id")
course = Course.objects.get(id=id)
serializer.save(course_id=course)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.