#django #django-models #orm
#django #django-модели #orm
Вопрос:
У меня есть две модели, к которым я хочу присоединиться, но у них нет никакого внешнего ключа
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_Description
, за исключением INV. NO.
и DOCUMENT TYPE
, которые находятся в Invoice
модели.
Я не хочу использовать ForeignKey в этом случае, потому что эти модели уже используются во многих местах, изменение базы данных потребует изменений везде.
моя проблема заключается только в том, что я хочу объединить две модели в Django, но без ForeignKey, чтобы я мог получить номер счета и тип документа соответствующей строки.
Есть какие-нибудь идеи о том, как я могу это сделать??
Ответ №1:
Если все, что вы хотите сделать, это получить InvoiceDescription
объект, который принадлежит данному Invoice
, вы можете сделать следующее:
invoice = Invoice.objects.first()
try:
description = InvoiceDescription.objects.get(invoice_id=invoice.invoice_id)
except InvoiceDescription.DoesNotExist:
description = None
Я предполагаю, что поле invoice_id
ссылается на идентификатор счета. Хотя вы не объявляли его с помощью models.ForeignKey
, в этой ситуации он по-прежнему действует как внешний ключ. Вам просто нужно выполнить поиск вручную.
Комментарии:
1. это будет два обращения к базе данных для одного запроса !?!… кстати, я решил эту проблему, объявив
Foreignkey
Invoice_Description
, что я хотел объединить таблицы, иmodels.Foreignkey
это наиболее удобно делать в Django …: D