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
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.
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.
Teşekkürler alasdir, açıklamanız mantıklı ve eklediğiniz bağlantı çok faydalı! – Xerion