Извлечение элементов из отношения «многие ко многим» в запросе Django - PullRequest
0 голосов
/ 03 марта 2020

Models.py

class SalesOrderItems(models.Model):
    item = models.ForeignKey(MasterItems, on_delete=models.CASCADE)
    item_quantity = models.IntegerField(default=0)


class SalesOrder(models.Model):

    delivery_method_choice = (('Full-Truck Load', 'Full-Truck Load'), ('Part-Truck Load', 'Part-Truck Load'))
    status_choices = (('On Hold', 'On Hold'),('Ready to Dispatch', 'Ready to Dispatch'),('Dispatched', 'Dispatched'))

    owner = models.ForeignKey(Teacher, on_delete=models.CASCADE, related_name='so_owner')
    client = models.ForeignKey(MasterClient, on_delete=models.CASCADE, related_name='so_client')
    reference_no = models.CharField(max_length=500, blank=True, null=True)
    date = models.DateField(default=datetime.date.today)
    shipment_date = models.DateField(default=datetime.date.today)
    delivery_method = models.CharField(max_length=500, default='Full-Truck Load', choices=delivery_method_choice)
    items = models.ManyToManyField(SalesOrderItems, related_name='items_so', blank=True, null=True)
    status = models.CharField(max_length=500, default='On Hold', choices=status_choices)
    origin = models.CharField(max_length=255)
    destination = models.CharField(max_length=255)

Я хочу получить items определенного заказа на продажу по django запросу

Моя попытка получить элементы:

items = []

        for i in sales_orders:
            so = SalesOrder.objects.filter(pk=i)[0]
            print("items",so.items)

Вывод:

items classroom.SalesOrderItems.None

Как получить список items в конкретном SalesOrder ??

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

этот запрос будет работать для вас

SalesOrder.objects.filter(id=1).values_list('items__item__item_name')

ниже представлена ​​моя простая модель Masteritems

class MasterItems(models.Model):
item_name = models.CharField(max_length=50)

def __str__(self):
    return self.item_name

, таким образом вы получите каждое имя элемента в наборе запросов. это мой простой вывод

<QuerySet [('rice',), ('pepsi',), ('Computer',)]>
0 голосов
/ 03 марта 2020
sales_orders = SalesOrder.objects.prefetch_related('items').filter(**sales_filter_here)

for sales_order in sales_orders:
    for sales_order_item in sales_order.items.all():
        print(sales_order_item)
...