Ich habe anders damit umgegangen. Ich überschreiben die CreateAPIView Methode erstellen, wie
class IPAnnotatedObject(CreateAPIView):
model = IPAnnotatedObject
queryset = IPAnnotatedObject.objects.all()
serializer_class = IPAnnotatedObject
def create(self, request, *args, **kwargs):
request.data['ip_addr'] = self.get_ip()
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
## perform_create calls serializer.save() which calls the serializer's create() method
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def get_ip(self):
x_forwarded_for = self.request.META.get('HTTP_X_FORWARDED_FOR',None)
if x_forwarded_for:
ip = x_forwarded_for.split(',')[0]
else:
ip = self.request.META.get('REMOTE_ADDR',None)
return ip
folgt
Die entsprechende Serializer Klasse sieht wie folgt
class IPAnnotatedObjectSerializer(serializers.ModelSerializer):
email = serializers.EmailField(validators=[UniqueValidator(queryset=IPAnnotatedObject.objects.all())])
password = serializers.CharField(write_only=True)
ip_addr = serializers.IPAddressField(write_only=True)
class Meta:
model = IPAnnotatedObject
fields = ['email','password','created_ip']
def create(self, validated_data):
email, password, created_ip = validated_data['email'], validated_data['password'],validated_data['created_ip']
try:
ipAnnoObject = IPAnnotatedObject.objects.create(email=email,password=make_password(password),ip_addr=ip_addr)
except Exception as e:
# you can think of better error handler
pass
return ipAnnoOjbect
Bitte geben Sie ein wenig mehr Kontext wie, wie Sie das zusätzliche Attribut hinzufügen und warum Sie die request.data aktualisieren möchten. Beachten Sie, dass das Aktualisieren von request.data normalerweise eine kleine Idee ist. – Linovia
@Linovia Ich möchte das zusätzliche Attribut 'request.data ['age'] = 30' hinzufügen. jetzt kann ich das nicht tun, wie request.data ist string not dict. jetzt, wenn verwenden 'data = json.loads (request.data)' dann 'request.data = json_data' dann bekomme ich Fehler nicht in der Lage, Attribut auf Anfrage zu setzen –
Hinzufügen von" request.data ['age'] = 30 "ist wie Du versuchst etwas zu tun, nicht den Grund, warum Du das tun/brauchen willst. – Linovia