Django和DRF在保存之前如何使用对API的POST请求的字段?

劳尔

我安装了Django 1.10和Django REST框架。

我很好地收到了POST请求,但是在创建内容之前,我希望它能对字段执行一些任务,并且我的views.py文件中包含以下内容

from rest_framework.decorators import detail_route
from rest_framework import serializers
from suds.client import Client
import base64
from . import views

# Create your views here.

from cfdipanel.models import Report, Invoice, UserProfile
from cfdi.serializers import ReportSerializer, InvoiceSerializer, UserProfileSerializer


class ReportViewSet(viewsets.ModelViewSet):
    queryset = Report.objects.all()
    serializer_class = ReportSerializer

    @detail_route(methods=['post'])
    def set_invoice(self, request, pk=None):

        #get report object
        my_report = self.get_object()
        serializer = InvoiceSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(report=my_report)
            return Response(serializer.data, status=status.HTTP_201_CREATED)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

这是我的文件serializer.py的一部分

from rest_framework import serializers
from cfdipanel.models import Report, Invoice, UserProfile

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ('user', 'karma')


class InvoiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Invoice
        fields = ('uuid', 're', 'rr', 'tt',
                  'emision_date', 'type_invoice', 'status', 'owner')


class ReportSerializer(serializers.ModelSerializer):
    owner = UserProfileSerializer(read_only=True)
    ownerId = serializers.PrimaryKeyRelatedField(write_only=True,
                                                 queryset=UserProfile.objects.all(),
                                                 source='owner')
    invoices = InvoiceSerializer(many=True,
                                 read_only=True,
                                 source='invoice_set')

    class Meta:
        model = Report
        fields = ('id', 'title', 'body', 'owner', 'ownerId', 'invoices')

这是models.py的一小段

class Invoice(models.Model):
    owner = models.ForeignKey(UserProfile)
    report = models.ForeignKey(Report)
    uuid = models.CharField(max_length=36)
    emision_date = models.CharField(max_length=28)
    re = models.CharField(max_length=13)
    rr = models.CharField(max_length=13)
    type_invoice = models.CharField(max_length=10)
    status = models.CharField(max_length=2, blank=True)
    tt = models.DecimalField(max_digits=19, decimal_places=9,
                                default=Decimal(0))
    def __str__(self):
        return self.uuid

状态字段为空,要填充它,我想在保存字段之前在view.py中执行类似于以下代码的操作:

url = 'https://an-api.com/ConsultService.svc?wsdl'
client = Client(url)
string = "?re=" + re + "&rr=" + rr + \
             "&tt=" + tt + "&id=" + uuid

response = client.service.Consulta(string)

# Create content for field status
status = response.Status

从Web服务获得响应后,然后保存并创建“发票”内容。

Arcegk

request.data返回一个dict实例,并InvoiceSerializer返回一个Invoice“实例”,因此您可以在反序列化之前或之后修改数据。使用:

data = request.data
data['field'] = 'foo'

或者

serializer = InvoiceSerializer(data=request.data)
serializer.object.invoice_field = 'foo'

对于DRF 3

serializer = InvoiceSerializer(data=request.data)
serializer.save(invoice_field ='foo')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 DJANGO 上的 POST 请求将默认数据保存在其他字段中?

ReactJS:如何使用 POST 请求更新 API 中的布尔字段

如何使用POST请求保存值数组?(Wordpress API)

在保存请求或使用django rest框架响应之前,如何对传入请求执行某些任务?

在使用Django Rest Framework保存之前,根据POST数据更新模型字段

Django DRF 和通用关系:如何从 API 响应中获取 content_object 字段?

如何在DRF模型字段中仅显示和使用日期时间中的天并发送请求以填充字段

如何使用Django REST API验证android用户POST请求?

DRF:如何在保存到数据库之前更改模型字段的值

如何在将字段保存在 Django 之前覆盖它?

使用DRF中的序列化器字段的子集反序列化POST请求

如何使用django和instagram API进行实时POST更新?

Django 和 DRF,请求的 ip 限制

如何使用Django Rest API更新(放置/发布请求)相关字段?

如何使用Servlet API处理POST请求

如何使用Rails从API获取POST请求

此字段是必需的 发出 POST 请求 DRF 时出错

如何使用Angular和两个POST请求创建保存/取消保存切换按钮?

对使用cURL但不支持Postman的Django DRF调用的POST请求

使用Django和DRF的auditlog

Django:在保存之前修改模型的字段

Django在保存之前更新foreignKey字段

Django DRF:如何调整选择字段的表示

RestEasy:如何使用参数和api键发送简单的POST请求

如何使用Falcon Python从POST请求保存图像

Django:Stripe和POST请求

DRF(django-rest-framework)和TokenAuthentication,如何基于Token自动填充json字段?

在对象创建时保存多对多字段 - Django DRF

如何从ReactJS Web应用发送POST请求到Django API?