#python #django #python-3.x #django-rest-framework
#python #django #python-3.x #django-rest-framework
Вопрос:
Я использую фреймворк Django Rest. Я использую метод post. После вызова метода post мне нужно получить первичный ключ в этом ответе post call.
Это мой код сериализатора:
from rest_framework import serializers
from .models import ImtsRequest, MercadoPagoPayment
class MercadoPagoPaymentSerializer(serializers.ModelSerializer):
# paymentRequestID = serializers.IntegerField(read_only=False)
class Meta:
model = MercadoPagoPayment
fields = '__all__'
# read_only_fields = ('CreatedDateTime','paymentRequestID')
def create(self, validated_data):
data = MercadoPagoPayment(token = validated_data['token'], payment_method_id = validated_data['payment_method_id'], issuer_id = validated_data['issuer_id'],installments = validated_data['installments'], order_id = validated_data['order_id'], payer_email = validated_data['payer_email'], transaction_amount = validated_data['transaction_amount'], capture = validated_data['capture'], requestjsondata = validated_data['requestjsondata'])
data.save()
print(data.paymentRequestid)
return data
Это моя модель:
from django.db import models
# Create your models here.
class MercadoPagoPayment(models.Model):
paymentRequestid = models.AutoField(db_column="paymentRequestid", primary_key=True)
token = models.CharField(max_length=32, blank=False, null=True)
payment_method_id = models.CharField(max_length=10, blank=True, null=True)
issuer_id = models.IntegerField(db_column='Issuer_id', null=True)
installments = models.IntegerField(db_column='installments', null=True)
order_id = models.CharField(max_length=32, blank=False, null=True)
payer_email = models.CharField(max_length=200, blank=True, null=True)
transaction_amount = models.FloatField(blank=False, null=False)
capture = models.BooleanField(default=False)
requestjsondata = models.TextField(db_column='requestjsondata', null=True)
CreatedDateTime = models.DateTimeField(db_column='CreatedDateTime', null=False, auto_now_add=True) # Field name made lowercase.
class Meta:
managed = True
db_table = 'MercadoPago_Payment'
Это мое мнение:
from django.shortcuts import render
from django.http import Http404, HttpResponse, JsonResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework import status, generics
from .serializers import *
from .models import *
import json
# Create your views here.
class MercadopagoCreatePayment(APIView):
def post(self, request, format=None):
request.data['requestjsondata'] = json.dumps(request.data['requestjsondata'])
requestData = MercadoPagoPaymentSerializer(data = request.data)
if requestData.is_valid():
requestData.save()
return Response(request.data, status=status.HTTP_201_CREATED)
Я получил paymentRequestid в методе создания сериализаторов. Но я не смог получить этот идентификатор в ответе.
Как я могу получить этот первичный ключ?
Благодарю вас
Комментарии:
1. Появляется ли «paymentRequestid»
request.data
непосредственно перед тем, как вернуть его в качестве ответа?2. запрос. у данных нет этой переменной. Потому что это автоматически сгенерированное значение.
3. Использовать вывод
requestData.save()
4. @IvanStarostin я понял. Спасибо
Ответ №1:
requestData.save() возвращает первичный ключ и все поля. Это ответ, возвращаемый сериализатором.
from django.shortcuts import render
from django.http import Http404, HttpResponse, JsonResponse
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework import status, generics
from .serializers import *
from .models import *
import json
# Create your views here.
class MercadopagoCreatePayment(APIView):
def post(self, request, format=None):
request.data['requestjsondata'] = json.dumps(request.data['requestjsondata'])
requestData = MercadoPagoPaymentSerializer(data = request.data)
if requestData.is_valid():
SerializerResponse = requestData.save()
request.data['id'] = SerializerResponse.pk
return Response(request.data, status=status.HTTP_201_CREATED)