Я новичок в DRF.
Я читал документацию по API, возможно, это очевидно, но я не смог найти удобный способ сделать это.
У меня есть Объект ответа, который имеет однозначное отношение к вопросу.
Во внешнем интерфейсе я использовал метод POST для создания ответа, отправленного в API/ ответы и метод PUT для обновления, отправленного, например. api/ответы/24
Но я хочу справиться с этим на стороне сервера. Я отправлю только метод POST в api/ответы, и DRF проверит на основе идентификатора ответа или идентификатора вопроса (поскольку он один к одному), существует ли объект.
Если да, он обновит существующий ответ, а если нет, то создаст новый ответ.
Я не мог понять, где мне его реализовать. Должен ли я переопределить create() в сериализаторе, во 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")
Подробнее здесь: https://stackoverflow.com/questions/378 ... -or-create