как я могу получить доступ к полям промежуточной таблицы через родительскую таблицу в django? - PullRequest
1 голос
/ 10 июля 2020

это мои таблицы:

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()

и как я могу получить доступ к полю промежуточной таблицы quantity через таблицу Order? это возможно?

Я пытался сделать это, но не работал:

>>> 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'

Извините за мой плохой английский sh

1 Ответ

1 голос
/ 10 июля 2020

Вместо этого вы перебираете midcartproduct_set:

myorder = Order.objects.first()
for midcartproduct in myorder.<b>midcartproduct_set</b>.all():
    print(midcartproduct<b>.quantity</b>, midcartproduct.product_id)

Поскольку вам, вероятно, понадобятся все Product s, вам лучше добавить .select_related(…) [Django -doc] для этого:

myorder = Order.objects.first()
for midcartproduct in myorder.midcartproduct_set.<b>select_related('product_id')</b>:
    print(midcartproduct<b>.quantity</b>, midcartproduct.product_id)

Примечание : Обычно суффикс _id к полю ForeignKey не добавляется, поскольку Django автоматически добавит «двойное» поле с суффиксом _id. Следовательно, это должно быть product вместо product_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...