2011-10-07 15 views
23

Django Yöneticileri'ni okuduktan sonra, onu kullanarak ne kadar yarar sağlayacağımı hala bilmiyorum. En iyi kullanımın, XYZ.objects.findBy*() gibi özel sorgular (salt okunur) yöntemleri eklemek olduğu görülmektedir. Ancak bunu Model sınıflarının kendisinden statik yöntemlerle kolayca yapabilirim. Django Managers'ı doğrudan model sınıfında staticmethod ile kullanma

Hep çünkü ikinci tercih: okunabilirlik ve daha kolay bakım açısından

  1. kod mevkiinde
  2. biraz daha az ayrıntılı benim çağrılarında objects özelliği gerekmez olarak
  3. Manager sınıfları var Model kalıtımla ilgili garip kurallar, bundan da uzak kalabilir.

statik yöntemleri kullanmak ve bunun yerine Yönetici sınıflarını kullanmak için iyi bir neden var mı?

cevap

28

Yöneticilere özel sorgular eklemek Django sözleşmesidir. custom managers:

Django belgelerinden, modellere "tablo düzeyinde" işlevsellik eklemenin tercih edilen yolu, ekstra yönetici yöntemleri eklemektir. Kendi özel uygulamanız buysa, kongre sözcüğü çok da önemli değil - gerçekten de şirketimin dahili kod tabanı, belki de özel bir yöneticiye ait olan birkaç tane sınıf metnine sahiptir. Ancak, diğer Django kullanıcılarıyla paylaşacağınız bir uygulama yazıyorsanız, özel bir yöneticide findBy'u görmeyi beklerler.

Bahsettiğiniz miras konularının çok kötü olduğunu sanmıyorum. custom managers and model inheritance docs'u okursanız, yakalanacağınızı düşünmüyorum. API

  1. Tutarlılık: Biz XYZ.objects.get() ve

    İşte bence yöneticisi yöntemleri kullanarak birkaç avantajları var XYZ.objects.all() kullanarak sorgular yaptığınızda yazma .objects ait ayrıntı, olduğu gibi, katlanılabilir. Sizin yönteminiz findBy, get, filter, aggregate ve diğerlerine aittir. XYZ.objects yöneticisinde neler yapabileceğinizi bilmek ister misiniz? dir(XYZ.objects) ile görüşme yapabileceğiniz zaman basit.

  2. Statik yöntemler örnek ad alanını "karıştırır". XYZ.findBy() iyi, ancak statik bir yöntem tanımlarsanız, xyz.findBy() da yapabilirsiniz. Belirli bir örnekte findBy aramasının çalıştırılması gerçekten anlamlı değildir. DRYness. Bazen aynı yöneticiyi birden fazla modelde kullanabilirsiniz.

Tüm bunları söyledikten sonra, size kalmış. Statik bir yöntem kullanmamanız için bir katil nedeninin farkında değilim.Bir yetişkinsiniz, bu sizin kodunuz ve eğer bir yönetici metodu olarak findBy yazmak istemiyorsanız, gökyüzü düşmeyecek;)

Daha fazla okuma için, blog yazısını Managers versus class methods James Bennett, Django sürüm yöneticisi.

+4

Teşekkürler alasdir, açıklamanız mantıklı ve eklediğiniz bağlantı çok faydalı! – Xerion

İlgili konular