Модель:Джанго оставил присоединиться к нулевой
class Product(models.Model):
name = models.CharField(max_length = 128)
def __unicode__(self):
return self.name
class Receipt(models.Model):
name = models.CharField(max_length=128)
components = models.ManyToManyField(Product, through='ReceiptComponent')
class Admin:
pass
def __unicode__(self):
return self.name
class ReceiptComponent(models.Model):
product = models.ForeignKey(Product)
receipt = models.ForeignKey(Receipt)
quantity = models.FloatField(max_length=9)
unit = models.ForeignKey(Unit)
def __unicode__(self):
return unicode(self.quantity!=0 and self.quantity or '') + ' ' + unicode(self.unit) + ' ' + self.product.genitive
Идея: есть компоненты на складе. Я хотел бы узнать, какие рецепты я могу сделать с компонентами, которые у меня есть.
Это непросто - но возможно - я сделал SQL-представление, которое получает решение. Но я учусь Python и Django, поэтому я хотел бы сделать это Django-стиль; D
Концепция решения:
получить набор рецептов, который имеет на один последний компонент:
list_of_available_components = ReceiptComponent.objects.filter (product__in = list_of_available_products) .distinct() list_of_related_receipts = Receipt.objects.filter (receiptcomponent__in = list_of_available_components) .distinct()
получить рецепты (от list_of_related_receipts), который не один последний компонент
list_of_incomplete_recipes = (SELECT * FROM drinkbook_receiptcomponent LEFT JOIN drinkstore_stock_products ИСПОЛЬЗОВАНИЕ (product_id) WHERE drinkstore_stock_products.stock_id IS NULL AND receipt_id IN (SELECT receipt_id FROM drinkbook_receiptcomponent РЕГИСТРИРУЙТЕСЬ drinkstore_stock_products ИСПОЛЬЗОВАНИЕ (product_id)))
получить рецепты (от list_of_related_receipts), которые не находятся в "list_of_incomplete_recipes"
Нет точно (на данный момент я не могу найти какую-либо подобную причину). Основное различие заключается в том, что в других местах существуют модели, которые могут иметь нулевые значения - не мои. У меня есть нулевые значения в запросе результата - не в модели –