【问题标题】:How to POST multiple data in DRF and React with Axios如何在 DRF 中发布多个数据并使用 Axios 进行反应
【发布时间】:2021-07-23 14:07:55
【问题描述】:

我有 2 个模型,名为 Recipe 和 Step.. 我已经对两者进行了序列化,以便为 GET 请求创建一个 API。我想知道有没有一种方法可以为 POST 请求创建,以便我可以在同一个请求中发送数据(步骤和配方)?

models.py:

from django.db import models

class Recipe(models.Model):
    title = models.CharField( max_length=50)
    uuid = models.CharField( max_length=100)

    def __str__(self):
        return f'{self.uuid}'
    

class Step(models.Model):
    step = models.CharField(max_length=300)
    uuid = models.ForeignKey(Recipe, on_delete=models.CASCADE)

    def __str__(self):
        return f'{self.step} - {self.uuid}'
    

serializers.py:

from rest_framework import serializers
from .models import *


class RecipeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Recipe
        fields = ['title', 'uuid']


class StepSerializer(serializers.ModelSerializer):
    class Meta:
        model = Step
        fields = ['step', 'uuid']

views.py:

from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import *
from .models import *

@api_view(['GET'])
def apiOverview(request):
    api_urls = {
        'List':'/recipe-list/',
        'Detail View':'/recipe-detail/<str:pk>/',
        'Create':'/recipe-create/',
        'Update':'/recipe-update/<str:pk>/',
        'Delete':'/recipe-delete/<str:pk>/',
        'Steps' : '/steps/<str:pk>'
    }
    return Response(api_urls)


@api_view(['GET'])
def recipeList(request):
    recipes = Recipe.objects.all()
    serializer = RecipeSerializer(recipes, many=True)
    return Response(serializer.data)


@api_view(['GET'])
def recipeDetail(request, pk):
    recipe = Recipe.objects.get(uuid=pk)
    recipe_serializer = RecipeSerializer(recipe, many=False)
    steps = Step.objects.filter(uuid=pk)
    steps_serializer = StepSerializer(steps, many=True)
    return Response({
        'recipe' : recipe_serializer.data,
        'steps' : steps_serializer.data
    })

如何为 POST 创建视图并处理这两个模型?

【问题讨论】:

  • 是的,你可以。只需将它们放在一个请求数据中,并拥有一个同时使用RecipeSerializerStepSerializer 的序列化程序。虽然这种方法是否是最佳实践是另一个讨论

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


【解决方案1】:

试试:

from rest_framework import generics
from .models import *


class StepAndRecipe(generics.CreateAPIView):
    queryset = Step.objects.all()
    queryset = Recipe.objects.all()
    serializer_class = StepSerializer
    serializer_class = RecipeSerializer

在urls.py中添加:

from django.urls import path
from .views import StepAndRecipe

urlpatterns = [
    path('steprecipepost', StepAndRecipe.as_view(), name='steps_recipes')

这仅适用于 POST!还有一件事:注意原始数据和 HTML 表单,因为您在同一个视图中使用两个模型,所以这些可能会有点混乱。

【讨论】:

  • 是否可以将其合并到同一个类中?我不想做出 2 个不同的 POST 请求来分别对 POST 数据做出反应。
  • 我想在同一个视图中同时拥有配方和步骤以及 POST 和 GET 的 url。希望我很清楚
猜你喜欢
  • 2018-07-10
  • 2020-08-19
  • 1970-01-01
  • 2020-05-19
  • 2019-08-29
  • 2021-10-07
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多