0

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)

I want to retrieve the items of a particular sales order by django query

My attempt to get the items:

items = []

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

Output:

items classroom.SalesOrderItems.None

How can I get the list of items in a particular SalesOrder ??

Rahul Sharma
  • 2,187
  • 6
  • 31
  • 76

2 Answers2

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

this query will work for you

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

below is my simple Masteritems model

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

def __str__(self):
    return self.item_name

by this way you will get every item name in queryset. this is my simple output

<QuerySet [('rice',), ('pepsi',), ('Computer',)]>