Le modèle:django gauche se joindre à null
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
L'idée: il y a des composants en stock. Je voudrais savoir quelles recettes je peux faire avec des composants que j'ai.
Ce n'est pas facile - mais possible - j'ai fait une vue SQL, qui obtient la solution. Mais je suis python apprendre et Django donc je voudrais faire de style Django; D
Le concept de solution:
obtenir l'ensemble des recettes qui a enfin un composant:
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()
obtenir des recettes (de list_of_related_receipts) qui n'a pas enfin un composant
list_of_incomplete_recipes = (SELECT * FROM GAUCHE drinkbook_receiptcomponent INSCRIPTION drinkstore_stock_products UTILISATION (product_id) OÙ drinkstore_stock_products.stock_id EST NULLE ET receipt_id IN (SELECT receipt_id DE drinkbook_receiptcomponent JOIN drinkstore_stock_products USING (product_id)))
obtenir des recettes (de list_of_related_receipts) qui ne sont pas "list_of_incomplete_recipes"
Pas exactement (pour l'instant je ne trouve pas de cause similaire). La principale différence est qu'ailleurs il y a des modèles qui peuvent avoir des valeurs nulles - pas les miennes. J'ai des valeurs nulles dans la requête résultat - pas dans le modèle –