假设这些是我的模型:
class Product(models.Model):
sku = models.CharField(unique=True) # Something like RXT00887
class Bill(models.Model):
customer = models.ForeignKey(Customer)
products = models.ManyToManyField(Product)
date = models.DateTimeField()
每个
Product
仅与一个 Bill
相关或根本不相关。
我正在开发一项功能,要求我搜索给定客户购买的
Product
。我通过以下方式实现这一目标:
bills = Bill.objects.filter(customer=customer)
results = Product.objects.filter(bill__in=bills, sku__icontains=search_str)
但是,我还需要结果中每个产品的
Bill
的一些属性。例如,我需要帐单 ID 和帐单日期。因此,结果中的每一行都应包含产品的所有属性以及两个附加属性:bill_id 和 bill_date。 Django 是否可以通过使用连接来实现这一点?如果是的话,怎么办?
每个产品仅与一个法案相关或根本不相关。
如果是这种情况,则建模是错误的。然后
Product
需要一个 ForeignKey
到 Bill
,例如:
class Product(models.Model):
sku = models.CharField(unique=True) # Something like RXT00887
bill = models.ForeignKey(
'Bill', related_name='products', on_delete=models.PROTECT
)
class Bill(models.Model):
customer = models.ForeignKey(Customer)
# products = models.ManyToManyField(Product)
date = models.DateTimeField()
然后您可以选择
Bill
以及 Product
:
results = Product.objects.filter(
bill__customer=customer, sku__icontains=search_str
).select_related('bill')
因此,您可以为每个产品访问
my_product.bill
,然后它是一个具有所需数据的 Bill
对象。