Создать соответствующие модели на ViewSet сохранить - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть простая модель, которая сериализуется и создается.Для этого Viewset выглядит следующим образом:

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)', который берет модель (в данном случае - порядок)и создает ряд связанных объектов, используя отношение внешнего ключа.

Возможно ли это обработать при сохранении?Поверьте, как и выше, переопределив execute_create, я должен сделать это.И, самое главное, как я могу получить доступ к только что созданной модели?

Для более ясного понимания того, что мне нужно, я хотел бы сделать следующее:

  1. Создать«Порядок» с использованием ViewSet выше
  2. Передача «Порядка» (или его идентификатора и т. Д. В зависимости от того, что возможно) для функции populate_ing
  3. populate_ing выполняет свою магию и создает другие модели
  4. Return'Order'

Мой сериализатор выглядит следующим образом:

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 Ответ

2 голосов
/ 16 апреля 2019

Созданный экземпляр будет доступен в атрибуте instance, поэтому его можно передать в функцию populate_ing() как,

class OrderViewset(viewsets.ModelViewSet):

    # depth = 1
    serializer_class = OrderSerializer

    ...

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)
        <b>populate_ing(serializer.instance)</b>
...