Django Rest Framework POST Aktualisieren, wenn Sie vorhandene oder erstellen

Ich bin neu in DRF.
Ich lese die API-docs, vielleicht ist es blind, aber ich konnte nicht finden einen einfachen Weg, es zu tun.

Habe ich ein Antwort-Objekt, das die eins-zu-eins-Beziehung mit einer Frage.

Auf der Vorderseite, die ich verwendet, um zu verwenden die POST-Methode zum erstellen einer Antwort geschickt-api/Antworten und PUT-Methode, um ein update gesendet, um z.B. api/Antworten/24

Aber ich möchte es behandeln, die auf der server-Seite. Werde ich nur senden Sie eine POST-Methode-api/Antworten und DRF überprüfen basierend auf answer_id oder question_id (da es eins zu eins), wenn das Objekt vorhanden ist.
Wenn es das tut, aktualisieren Sie die bestehenden, wenn nicht, wird es eine neue Antwort.

Soll, wo ich es umgesetzt habe, konnte ich nicht herausfinden. Überwiegendes anlegen in serializer oder in ViewSet oder etwas anderes?

Mein Modell, serializer und Ansicht wie diese:

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',)
Nicht POST das Objekt Bearbeiten wenn man schon (vorausgesetzt die id ist bereits in der URL)?. Aus dem link: "Es ist durchaus möglich, gültige und sogar bevorzugter in einigen Fällen zu verwenden, SETZEN Sie zum erstellen von Ressourcen oder verwenden Sie den POST zu aktualisieren, Ressourcen".
Nein, der Artikel sagt, wenn du die id in der url, verwenden, LEGEN Sie sonst mit der POST. So will ich mit der POST. Aber ich möchte es zu aktualisieren, nicht versucht zu erstellen, wenn es schon die Instanz. Und ich will, dass es aktualisiert werden teilweise, so dass es ist auch dass.
Hm - muss ich haben, interpretiert das falsch. Ich sehe aus dem Artikel in die Kommentare, ich bin nicht alleine 🙂 Vielleicht vorherigen ALSO Antwort kann Ihnen helfen, zusammen dann?
Danke, aber diese Antwort sagt im Gegenteil: "Update: Kann nur durchgeführt werden, mit PUT in der folgenden Weise:..."

InformationsquelleAutor Ali Ankarali | 2016-06-15

Schreibe einen Kommentar