J'aiun django assez complexe requête
class Supplier(Model) :
pass
class Customer(Model) :
pass
class Dock(Model) :
pass
class SupplierDockAccess(Model) :
supplier = ForeignKey(Supplier)
dock = ForeignKey(Dock)
class SupplierCustomerAccess(Model):
supplier = ForeignKey(Supplier)
customer = ForeignKey(Customer)
J'ai une instance de client, et je voudrais obtenir tous les quais que le client a accès. Les clients ont accès aux fournisseurs via SupplierCustomerAccess, et les fournisseurs ont accès aux Docks via SupplierDockAccess. Je peux le faire comme ceci:
# get the suppliers the customer has access to
supplier_customer_accesses = SupplierCustomerAccess.objects.filter(customer=customer)
suppliers = [s.supplier for s in supplier_customer_accesses]
# get the docks those suppliers have access to
supplier_dock_accesses = SupplierDockAccess.objects.filter(supplier__in=suppliers)
docks = [s.dock for s in supplier_dock_accesses]
... mais la liste résultante des quais contient des doublons, et je pense vraiment que ce oughtta soit possible de le faire en une seule fois. Quelqu'un a-t-il envie de démontrer un puissant django-fu?
Cela limite également votre JOIN à deux tables, au lieu de quatre comme la réponse de l'OP. –