问题描述
我真的是Django及其关系中的新手。我做了一个小型的电子商务模型。在我的模型中,有customer
,products
,product-tags
和orders
。 product
和product-tags
有多对多的关系。在Order
模型many-to-one
与customer
和Product
的关系中。我认为我的关系模型看起来不错。我已经为React
前端设置了api端点。我要在其中提取特定单个客户的特定产品订单。我在Django文档_set.all()
中看到过,但仍然无法获得客户特定的订单。在我的React前端中,order-list-image和customer-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 (将#修改为@)