Django React JS多对一API

问题描述

我真的是Django及其关系中的新手。我做了一个小型的电子商务模型。在我的模型中,有customerproductsproduct-tagsordersproductproduct-tags有多对多的关系。在Order模型many-to-onecustomerProduct的关系中。我认为我的关系模型看起来不错。我已经为React前端设置了api端点。我要在其中提取特定单个客户的特定产品订单。我在Django文档_set.all()中看到过,但仍然无法获得客户特定的订单。在我的React前端中,order-list-imagecustomer-list-image看起来像这样。

我要提取客户的订单清单。但是无法做到这一点。

我在Gitlab

中共享我的代码

这是Django模型

# ##################
# ##### MODELS #####
# ##################
from __future__ import unicode_literals

from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=200,null= True)
    email =  models.CharField(max_length=20,null=True)
    phone = models.CharField(max_length=20,null=True)
    date_created= models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

class Tag(models.Model):
    name= models.CharField(max_length=200,null=True)

    def __str__(self):
        return self.name

class Product(models.Model):
    CATEGORY=(
         ('Indoor','Indoor'),('Outdoor','Outdoor'),)

    name= models.CharField(max_length=200,null=True)
    price= models.FloatField(null=True)
    category=models.CharField(max_length=200,null=True,choices=CATEGORY)
    description= models.CharField(max_length=200,blank= True)
    date_created=models.DateTimeField(auto_now_add=True,null=True)
    tags= models.ManyToManyField(Tag)

    def __str__(self):
        return self.name


class Order(models.Model):
    STATUS =(
         ('Pending','Pending'),('Out of delivery','Out of delivery'),('Delivered','Delivered'),)
    status= models.CharField(max_length=200,choices= STATUS)
    date_created=models.DateTimeField(auto_now_add=True,null=True)
    customer= models.ForeignKey(Customer,null= True,on_delete= models.SET_NULL)
    product= models.ForeignKey(Product,on_delete= models.SET_NULL)

这是我的序列化器

from rest_framework import serializers
from .models import *

class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tag
        fields = ["name"]

class ProductSerializer(serializers.ModelSerializer):
    tags =  TagSerializer(many=True)
    class Meta:
        model = Product
        fields = ['name','id','tags']

class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = ['name','email','phone']


class OrderSerializer(serializers.ModelSerializer):
    customer = CustomerSerializer()
    product = ProductSerializer()
    class Meta:
        model = Order
        fields = ['status','customer','product']

这是我的views' api端点和CRUD方法

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


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


@api_view(['GET'])
def orderList(request):
    orders = Order.objects.all()
    serializer = OrderSerializer(orders,many=True)
    return Response(serializer.data)

@api_view(['POST'])
def orderCreate(request):
    serializer = OrderSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)

@api_view(['GET'])
def customerList(request):
    customers = Customer.objects.all()
    serializer = CustomerSerializer(customers,many=True)
    return Response(serializer.data)


@api_view(['GET'])
def customerDetail(request,pk):
    customers = Customer.objects.get(id=pk)
    orders = customers.order_set.all() // IN here I tried order_set.all()
    serializer = CustomerSerializer(customers,many=False)

    return Response(serializer.data)


@api_view(['POST'])
def customerCreate(request):
    serializer = CustomerSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)

@api_view(['POST'])
def customerUpdate(request,pk):
    customer = Customer.objects.get(id=pk)
    serializer = CustomerSerializer(instance=customer,data=request.data)
    if serializer.is_valid():
        serializer.save()
    return Response(serializer.data)


@api_view(['DELETE'])
def customerDelete(request,pk):
    customer = Customer.objects.get(id=pk)
    customer.delete()

    return Response("Item deleted")

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...