Я хочу фильтровать и получать только те данные, которые относятся к данным связанных объектов, если только данные, связанные с его дочерними объектами родительского объекта, имеют данные. Например: у меня есть следующие модели:
class Collection(models.Model):
date_of_collection=models.DateField()
class Product(models.Model):
name=models.CharField(max_length=100)
collection = models.ForeignKey(Collection)
class Price(models.Model):
price = models.FloatField()
products = models.ForeignKey(Products, on_delete=models.CASCADE)
и у меня есть данные, связанные с моделями, как:
Collection:
+----+--------------------+
| id | date_of_collection |
+----+--------------------+
| 1 | 2019-01-17 |
| 2 | 2019-01-30 |
| 3 | 2019-02-01 |
| 4 | 2019-02-02 |
+----+--------------------+
Products:
+----+--------------------------------+
| id | name | collection |
+----+--------------------------------+
| 1 | product 1 | 3 |
| 2 | product 2 | 1 |
| 3 | product 3 | 1 |
| 4 | product 4 | 4 |
+----+--------------------------------+
Price:
| id | price | product |
+--------+------------------+-----------------------+
| 1 | 10.00 | 1 |
| 2 | 20.00 | 1 |
| 3 | 12.00 | 3 |
+--------+------------------+-----------------------+
здесь у меня есть цена, связанная только с продуктом 1
и 3
, поэтому мне нужны только те продукты, основанные на наборе запросов, которые я хочу фильтровать только на основе определенной даты_из_коллекции.
Я пробовал следующий набор запросов:
collection_month = Collection.objects.filter(date_of_collection__month=2)
product = Product.objects.filter(collection_id__in=collection_month).exclude(price_set__price=None)
это так, как я делаю или как-то по-другому .. иногда это дает плохой результат. Как это сделать.