首页 > 解决方案 > 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__'

标签: djangodjango-rest-framework

解决方案


推荐阅读