【发布时间】:2019-04-16 12:48:25
【问题描述】:
我有一个序列化和创建的简单模型。视图集如下:
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)”,它采用模型(在本例中为订单)并使用外键关系创建许多相关对象。
是否可以在保存时处理此问题?相信,如上所述,通过覆盖 perform_create 我应该这样做。而且,最重要的是,如何访问刚刚创建的模型?
为了更明确地说明我的目标,我希望做到以下几点:
- 使用上面的 ViewSet 创建“订单”
- 将“订单”(或其 id 等,视情况而定)传递给函数 populate_ing
- populate_ing 发挥作用并创建其他模型
- 返回“订单”
我的序列化器如下:
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)
【问题讨论】:
-
你想在创建过程中调用
populate_ing()函数only? -
希望先创建对象,然后将其传递给 populate_ing()
-
那么,
populate_ing()函数的参数是什么? -
基本上上面应该创建一个“订单”,我想将该订单传递给函数
-
那么,Model 类,对吧?
标签: python django serialization django-models django-rest-framework