django:连接两个没有外键的表
Posted
技术标签:
【中文标题】django:连接两个没有外键的表【英文标题】:django: join two tables without foreignkey 【发布时间】:2020-12-05 05:53:05 【问题描述】:我有两个想要加入的模型,但它们没有任何外键
class Invoice(models.Model):
invoice_id = models.IntegerField(blank=True, null=True)
quotation_id = models.IntegerField(blank=True, null=True)
client_id = models.ForeignKey(tbl_customer, on_delete=models.CASCADE)
invoice_number = models.IntegerField(blank=True, null=True)
quotation_number = models.IntegerField(blank=True, null=True)
date = models.DateField(blank=True, null=True)
total_amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
total_tax = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
document_type = models.CharField(max_length=50, default='', blank=True, null=True)
和
class Invoice_Description(models.Model):
invoice_id = models.IntegerField(blank=True, null=True)
client_id = models.ForeignKey(tbl_customer, on_delete=models.CASCADE)
quotation_id = models.IntegerField(blank=True, null=True)
item_id = models.ForeignKey(tbl_item, on_delete=models.CASCADE)
item_qty = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
item_unit_price = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
Invoice
包含有关发票文档、其总价、日期等的信息,而Invoice_Description
保留在该特定发票上添加的项目、项目价格、总数量、每个项目的折扣等的记录。
我想在报告中显示与类似项目相关的所有记录
ITEM NAME CUSTOMER NAME INV. NO. QTY DOCUMENT TYPE UNIT PRICE SALE PRICE
Item1 Client1 01 950.00 1000.00
除了Invoice
模型中的INV. NO.
和DOCUMENT TYPE
之外,我拥有来自Invoice_Description
的所有列。
我不想在这种情况下使用 ForeignKey,因为这些模型已经在许多地方使用,更改数据库将需要在任何地方进行更改。
我的问题是我想在 Django 中加入两个模型但没有 ForeignKey 以便我可以获得相应行的 Invoice No. 和 Document Type。
关于如何做到这一点的任何想法?
【问题讨论】:
【参考方案1】:如果您只想检索属于给定Invoice
的InvoiceDescription
对象,您可以执行以下操作:
invoice = Invoice.objects.first()
try:
description = InvoiceDescription.objects.get(invoice_id=invoice.invoice_id)
except InvoiceDescription.DoesNotExist:
description = None
我假设字段 invoice_id
指的是发票 ID。尽管您没有使用 models.ForeignKey
声明它,但在这种情况下它仍然充当外键。您只需手动进行查找。
【讨论】:
一个查询将是两个数据库命中!?!...顺便说一句,我通过在Invoice_Description
中声明Foreignkey
解决了这个问题,我想加入表格,models.Foreignkey
是最多的在 Django 中这样做很方便...:D以上是关于django:连接两个没有外键的表的主要内容,如果未能解决你的问题,请参考以下文章