You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中创建包含嵌套关联对象的Model模型

Django 生产订单条目功能实现方案

方案1:关系型数据库标准实现(生产环境推荐)

这是符合数据库设计规范的实现方式,通过中间模型存储多对多关联的额外字段(数量),保证数据一致性和查询灵活性。

完整模型代码

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100, blank=True, default='')

    def __str__(self):
        return self.name

# 新增中间表模型,存储生产单与产品的关联关系+数量
class ProductionOrderEntry(models.Model):
    production_order = models.ForeignKey('ProductionOrder', on_delete=models.CASCADE, related_name='entries')
    product = models.ForeignKey(Product, on_delete=models.PROTECT) # 防止已关联生产单的产品被误删
    quantity = models.PositiveIntegerField(default=1) # 存储产品数量,仅支持正整数

class ProductionOrder(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    # 可选:显式声明多对多字段方便反向查询
    products = models.ManyToManyField(Product, through=ProductionOrderEntry, related_name='production_orders')

生成目标数据结构示例

def get_production_order_info(order_id):
    order = ProductionOrder.objects.get(id=order_id)
    return {
        'id': order.id,
        'entries': [
            {'product': entry.product.name, 'quantity': entry.quantity}
            for entry in order.entries.all()
        ]
    }

方案优势

  • 遵循数据库范式,支持外键约束,不会出现无效的产品引用
  • 支持对单个条目做数据库级的查询、过滤、统计,比如统计某产品所有生产单的总数量非常便捷

方案2:JSON字段快速实现(仅推荐原型开发使用)

如果是小型项目、不需要对条目做复杂查询,可以用JSON字段直接存储字典列表,开发成本更低但数据一致性风险更高。

完整模型代码

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100, blank=True, default='')

class ProductionOrder(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    entries = models.JSONField(default=list) # 直接存储条目字典列表

写入数据示例

product1 = Product.objects.create(name='product_1_ref')
product2 = Product.objects.create(name='product_2_ref')

order = ProductionOrder.objects.create(
    entries=[
        {'product': product1.name, 'quantity': 10},
        {'product': product2.name, 'quantity': 10}
    ]
)

方案劣势

  • 没有外键约束,产品删除后JSON内的引用不会自动更新,容易产生脏数据
  • 无法直接对entries内的产品、数量做数据库级的过滤统计,大数据量下查询效率极低

内容的提问来源于stack exchange,提问作者maikelinhas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:06:00