我是DRF的新手,已经阅读了API文档,但可能很明显,我找不到方便的方法来完成它。
我有一个Answer
对象,它与一个Question
具有一对一的关系。
在前端,我曾经使用POST方法创建一个答案发送到api/answers
,并使用PUT方法更新发送到例如api/answers/24
。
但我想在服务器端处理它。我只会向api/answers
发送POST方法,DRF将基于answer_id
或question_id
(因为它是一对一的)检查对象是否存在。如果存在,它将更新现有对象,如果不存在,它将创建一个新的答案。
我无法弄清楚应该在哪里实现它。我应该在序列化器或ViewSet中覆盖create()
还是其他什么地方?
这是我的模型,序列化器和视图:
class Answer(models.Model):
question = models.OneToOneField(
Question, on_delete=models.CASCADE, related_name="answer"
)
answer = models.CharField(
max_length=1, choices=ANSWER_CHOICES, null=True, blank=True
)
class AnswerSerializer(serializers.ModelSerializer):
question = serializers.PrimaryKeyRelatedField(
many=False, queryset=Question.objects.all()
)
class Meta:
model = Answer
fields = ("id", "answer", "question")
class AnswerViewSet(ModelViewSet):
queryset = Answer.objects.all()
serializer_class = AnswerSerializer
filter_fields = ("question", "answer")