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

如何为Supplier模型添加多个IME条目?当前仅支持单个关联

解决方案

要实现一个供应商关联多个IME条目和多个收据,你需要调整模型的关联关系,具体改动如下:

1. 调整Supplier与Imee的关联(多对多)

当前的ForeignKey只能让一个供应商关联单个IME,改成ManyToManyField即可支持一个供应商对应多个IME条目。

2. 拆分收据为独立模型(一对多)

把收据信息从Supplier模型中剥离出来,单独创建Receipt模型,通过ForeignKey关联到Supplier,这样一个供应商可以拥有多个收据。

修改后的完整代码:

from django.db import models
from django.urls import reverse

class Imee(models.Model):
    ime_number = models.CharField(max_length=256, null=False)

    def __str__(self):
        return self.ime_number

    def get_absolute_url(self):
        return reverse("ghaith:detail", kwargs={'pk': self.pk})   

class Receipt(models.Model):
    supplier = models.ForeignKey('Supplier', related_name='receipts', on_delete=models.CASCADE)
    receipt_number = models.IntegerField(unique=True, null=False)
    receipt_date = models.CharField(max_length=256, null=False)

    def __str__(self):
        return f"Receipt {self.receipt_number} for {self.supplier.supplier_name}"

class Supplier(models.Model):
    supplier_name = models.CharField(max_length=256, null=False)
    # 替换ForeignKey为ManyToManyField,支持一个供应商关联多个IME
    imees = models.ManyToManyField(Imee, related_name='suppliers')

    def __str__(self):
        return self.supplier_name

    def get_absolute_url(self):
        return reverse("ghaith:detail", kwargs={'pk': self.pk})       

关键改动说明:

  • Supplier与Imee的关联:用ManyToManyField替代ForeignKey,字段名改为imees(复数更符合语义),你可以通过supplier.imees.all()获取该供应商的所有IME条目,也能通过imee.suppliers.all()获取关联该IME的所有供应商。
  • 收据模型拆分:新建Receipt模型,通过ForeignKey关联到Supplier,related_name='receipts'让你可以通过supplier.receipts.all()快速获取该供应商的所有收据。
  • 收据字段调整:将原本属于Supplier的receipt_number和receipt_date移到Receipt模型中,保证每个收据对应唯一编号,同时支持一个供应商有多条收据记录。

使用示例:

# 创建供应商
supplier = Supplier.objects.create(supplier_name="ABC Corp")
# 创建两个IME
ime1 = Imee.objects.create(ime_number="IME123")
ime2 = Imee.objects.create(ime_number="IME456")
# 给供应商关联IME
supplier.imees.add(ime1, ime2)
# 创建收据
Receipt.objects.create(supplier=supplier, receipt_number=1001, receipt_date="2024-05-20")
Receipt.objects.create(supplier=supplier, receipt_number=1002, receipt_date="2024-05-21")

# 查询供应商的所有IME
supplier.imees.all()
# 查询供应商的所有收据
supplier.receipts.all()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:22:16