Django: фильтр ManyToManyfield всех элементов в QuerySet
В основном я хочу сделать что-то вроде этого:
Мне нужен отдельный список всех продуктов из всех выполненных заказов, но я хочу сохранить/аннотировать? Ссылку заказа('refCode') на объект Product.
Order.objects.filter(is_completed=True).order_by('-date_created').products.all().filter(dlLocation__isnull=True).distinct()
Обратите внимание на ".products.all()".
К сожалению, это не корректный код. Поэтому я решил сделать 2 отдельных набора запросов следующим образом:
completedOrders = Order.objects.filter(is_completed=True).order_by('-date_created').values_list('refCode', 'products', named=True)
#<QuerySet [Row(refCode='7822788', products=307691), Row(refCode='7822788', products=307905) Row(refCode='4083860', products=307874)]>
downloads = Product.objects.filter(topicID__in=completedOrders.values('products')).filter(dlLocation__isnull=True).distinct()
#<QuerySet [<Product: product12>, <Product: product43>, <Product: product35>>
Как я могу вставить объект Product по его соответствующему topicID в дикту строки completedOrders?
Результат может быть примерно таким:
#<QuerySet [Row(refCode='7822788', products=<Product: product12>), Row(refCode='7822788', products=<Product: product43>) Row(refCode='4083860', products=<Product: product35>)]>
Order models.py:
class Order(models.Model):
refCode = models.CharField(max_length=15, unique=True, primary_key=True, default=generateOrderRefCode)
products = models.ManyToManyField(Product)
is_completed = models.BooleanField(null=False, default=False)
...
Product models.py:
class Product(models.Model):
topicID = models.IntegerField(null=False, unique=True, primary_key=True)
dlLocation = models.CharField(max_length=200, null=True, blank=True)
...
Прошу прощения за плохое объяснение и грамматические ошибки, это первый раз, когда я задаю вопрос на StackOverflow и моя голова практически сломана от долгой работы над этим проектом, или я схожу с ума lol. Спасибо заранее и желаю вам жизни, полной любви и радости <3