在ViewSet保存上创建相应的模型

时间:2019-04-16 12:48:25

标签: python django serialization django-models django-rest-framework

我有一个序列化并创建的简单模型。此视图集如下:

class OrderViewset(viewsets.ModelViewSet):

    depth = 1
    serializer_class = OrderSerializer

    ...

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
        populate_ing(serializer)

一旦用户保存并创建了模型,我就打算射击并调用“ populate_ing(xxx)”,后者将使用模型(在这种情况下为订单)并使用外键关系创建许多相关对象。 / p>

是否可以在保存时进行处理?相信,如上所述,通过覆盖perform_create我应该这样做。而且,最重要的是,如何访问刚刚创建的模型?

为了更清楚地了解我的追求,我希望执行以下操作:

  1. 使用上方的ViewSet创建“订单”
  2. 将“订单”(或其ID等,视情况而定)传递给populate_ing函数
  3. populate_ing发挥作用并创建其他模型
  4. 返回“订单”

我的序列化器如下:

class OrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

在带有表单的普通Djnago视图中,我会对其进行处理以达到以下效果:

def view_create_order(request):

    form = OrderForm(request.POST or None)

    if form.is_valid():

        new_order = form.save()

        populate_ing(new_order)

    context = {"form": form}
    template = "order/order-update.html"
    return render(request, template, context)

1 个答案:

答案 0 :(得分:2)

创建的实例将在 instance 属性中可用,因此可以将其传递给 populate_ing() 函数,

class OrderViewset(viewsets.ModelViewSet):

    # depth = 1
    serializer_class = OrderSerializer

    ...

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
        populate_ing(serializer.instance)