在Django Rest Framework中,models.py中有一个TestPaper模型中有个字段是:”question“用于连接Question模型的外键。现在你需要在views.py中写入一个action,使用ModelViewSet中自带的创建功能进行对模型”PUT“的接口,将输入question字段的数据进行更新。
时间: 2023-11-27 16:53:07 浏览: 80
在Django Rest Framework中,可以使用ModelViewSet中的update()方法来更新一个模型实例。下面是一个可能的实现:
```python
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from .models import TestPaper, Question
from .serializers import TestPaperSerializer
class TestPaperViewSet(viewsets.ModelViewSet):
queryset = TestPaper.objects.all()
serializer_class = TestPaperSerializer
@action(detail=True, methods=['put'])
def update_question(self, request, pk=None):
test_paper = self.get_object()
question_id = request.data.get('question')
try:
question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
return Response({'error': 'Question not found'}, status=400)
test_paper.question = question
test_paper.save()
serializer = self.get_serializer(test_paper)
return Response(serializer.data)
```
在上面的代码中,我们在TestPaperViewSet中添加了一个名为update_question的自定义action。这个action使用PUT方法,并且需要一个test_paper的主键作为参数。它首先获取要更新的TestPaper实例,然后从请求数据中获取新的question的主键。接着它尝试从Question模型中获取该主键对应的实例。如果找不到对应的实例,它将返回一个错误响应。否则,它将更新TestPaper实例的question字段,并将其保存到数据库中。最后,它使用TestPaperSerializer将更新后的实例序列化成JSON格式的响应数据并返回。
阅读全文