如何通过 django 中的父表访问中间表字段?
Posted
技术标签:
【中文标题】如何通过 django 中的父表访问中间表字段?【英文标题】:how can i access to the intermediary table fields through the parent table in django? 【发布时间】:2020-10-31 10:53:14 【问题描述】:这是我的桌子:
class MyUser(models.Model):
pass
class Product(models.Model):
name = models.CharField()
class Order(models.Model):
customer = models.ForeignKey(MyUser, on_delete=models.CASCADE)
products = models.ManyToManyField(Product , through='MidCartProduct')
class MidCartProduct(models.Model):
class Meta :
unique_together = (('order_id' , 'product_id'))
order_id = models.ForeignKey(Order , on_delete=models.CASCADE)
product_id = models.ForeignKey(Product , on_delete=models.CASCADE)
quantity = models.PositiveSmallIntegerField()
那么我如何通过Order
表访问中间表quantity
字段?
这可能吗?
我试图这样做但没有工作:
>>> a = Order.objects.first().products.first()
>>> a.quantity
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Order' object has no attribute 'quantity'
对不起我的英语不好
【问题讨论】:
【参考方案1】:您改为迭代 midcartproduct_set
:
myorder = Order.objects.first()
for midcartproduct in myorder.midcartproduct_set.all():
print(midcartproduct.quantity, midcartproduct.product_id)
由于您可能需要所有Product
s,因此您最好为此添加.select_related(…)
[Django-doc]:
myorder = Order.objects.first()
for midcartproduct in myorder.midcartproduct_set.select_related('product_id'):
print(midcartproduct.quantity, midcartproduct.product_id)
注意:通常不会在
ForeignKey
字段中添加后缀_id
,因为 Django 将自动添加一个带有_id
后缀的“孪生”字段。因此应该 是product
,而不是。product_id
【讨论】:
以上是关于如何通过 django 中的父表访问中间表字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何将嵌套的子表值与父表行关联并插入子表值对应于php中的父表行