Я новичок в DRF. Я читал документы API, возможно, это не замечательно, но я не мог найти удобный способ сделать это.
У меня есть объект Answer, который имеет отношение "один к одному" с вопросом.
На лицевой стороне я использовал метод POST для создания ответа, отправленного на api/answers, и метод PUT для обновления, отправленного, например. апи/ответы/24
Но я хочу обработать его на стороне сервера. Я только отправлю метод POST в api/answers, и DRF проверит на основе answer_id или question_id (поскольку это один к одному), если объект существует. Если это произойдет, оно обновит существующее, если оно не создаст новый ответ.
Где я должен это реализовать, я не мог понять. Переопределить создание в сериализаторе или в ViewSet или что-то еще?
Моя модель, сериализатор и представление выглядят следующим образом:
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',)