django - Django一父二子关系
问题描述
我是 Django 和 Django-Rest-framework 的新手。我正在关注一个Youtube 教程。他使用静态 Django 模板,但我想使用 React 作为我的前端。所以我创建了多个 api 端点。在这个特定的Youtube 插曲中,我坚持展示特定客户购买的产品类型。我的项目的简短摘要是:我有四个模型:订单、客户、产品和标签(产品和标签有多对多的关系)。在订单模型中,我有两个外键,一个是产品,另一个是客户。这是我订购的型号[看起来像]。我不知道如何查询和显示what kind of products specific customer(by using id) bought
。
这是我的模型
from __future__ import unicode_literals
from django.db import models
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,null=True, blank= True)
date_created=models.DateTimeField(auto_now_add=True, null=True)
tags= models.ManyToManyField(Tag)
def __str__(self):
return self.name
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 Order(models.Model):
STATUS =(
('Pending', 'Pending'),
('Out of delivery', 'Out of delivery'),
('Delivered', 'Delivered'),
)
status= models.CharField(max_length=200, null=True,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, null= True, 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 = '__all__'
class CustomerSerializer(serializers.ModelSerializer):
products: ProductSerializer(many=True)
class Meta:
model = Customer
fields = '__all__'
class OrderSerializer(serializers.ModelSerializer):
customer = CustomerSerializer()
product = ProductSerializer()
class Meta:
model = Order
fields = '__all__'
class CustomerSerializer(serializers.ModelSerializer):
products: ProductSerializer(many=True)
orders: OrderSerializer(many=True)
class Meta:
model = Customer
fields = '__all__'
解决方案
推荐阅读
- swift - Swift Combine:未来会做异步工作吗?
- java - StaxEventItemWriter 用于吐出带有标题的大型 XML 文件
- django - 对代码进行更改不会反映在 django webapp 上
- vuejs3 - 为什么 toRaw(obj) 保持反应性?
- python - “on_raw_reaction_add”工作但“on_raw_reaction_remove”不返回公会?
- sql - SQL Max 函数返回两个结果,尽管只需要其中一个
- node.js - html-pdf 调整内容以适应 PDF
- linux - 计数器循环不会在期望内递增
- apache-kafka - 使用 SASL_SSL/OAUTHBEARER 的集群中的 Kafka Producer 错误
- php - Laravel 语言环境不采用其他日期格式