Ich möchte in der Lage sein, einen Benutzerdatensatz per POST zu aktualisieren. Die ID ist jedoch immer NULL. Selbst wenn ich die ID passieren scheint esdjango Rest Framework - immer INSERTs, nie UPDATES
Code anzeigen ignoriert werden:
JSON ABGEGEBEN:
{
"id": 1,
"name": "Craig Champion",
"profession": "Developer",
"email": "[email protected]"
}
@api_view(['POST'])
def get_purchase(request):
"""
Gets purchase records for a user
Purchase collection is returned
"""
user = User();
serializer = UserSerializer(user, data=request.DATA)
if serializer.is_valid():
#The object ALWAYS has ID = nothing at this point
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
ModelSerializer
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'name', 'profession', 'email', 'password',)
write_only_fields = ('password' ,)
Modell
class User(models.Model):
name = models.CharField(max_length=30, null=True, blank=True)
profession = models.CharField(max_length=100, null=True, blank=True)
email = models.EmailField()
password = models.CharField(max_length=20, null=True, blank=True)
def __unicode__(self):
return self.name
Wie kann Ich zwinge den e Savechanges zu aktualisieren und die ID zu sehen?
Das repariert es nicht. Das Problem ist, dass beim Initialisieren von UserSerializer die ID nicht an das Objekt übergeben wird. Es ist immer Nothing (oder null) –
@ISAIMobile Durch den Aufruf von 'User()' erstellen Sie ein neues Benutzerobjekt. Um einen bereits vorhandenen Benutzer zu aktualisieren, rufen Sie diesen Benutzer zuerst mit einer 'User.objects.get'-Abfrage ab und übergeben diese dann an den Serializer mit' partially = True'. –
Danke dafür, aber wie extrahiere ich die ID des Benutzers von request.DATA? –