'Django alanları s model olsun
Django model dikkate alındığında, tüm alanları listesine çalışıyorum. _meta modeli öznitelik, ama meta önüne alt çizgi değil kullanarak _meta özniteliği, bir özel öznitelik olduğunu gösterir bunu yaparken bazı örnekler gördüm ve doğrudan erişilebilir olması gerekmez mi? ... Çünkü, örneğin, _meta düzenini gelecekte değişebilir ve istikrarlı bir API değil mi?
_meta bu kurala bir istisna değildir? Ve kullanmaya kararlı hazır yoksa kabul kötü uygulamaya erişmek için. Yoksa bir işlevi veya _meta özniteliği kullanmadan bir model alanları incelemek için başka bir yol var mı? Aşağıda bazı bağlantılar bu _meta özniteliği kullanarak nasıl yapılacağını gösteren bir liste
Herhangi bir tavsiye çok takdir ediliyor.
CEVAP
_meta
özel, nispeten istikrarlı. 1.3 veya 1.4 önce olabilecek bunu resmileştirmek, belge ve alt çizgi kaldırmak için çabalar var. Çaba bir sürü insan zaten kullanıyoruz çünkü işler geriye doğru uyumlu olduğundan emin olmak için yapılır düşünüyorum.
Eğer uyumluluk konusunda özellikle endişeleriniz varsa, bir model alır ve alanları döndüren bir fonksiyon yazın. Bu ise gelecekte bir şey değiştirmez, yalnızca bir işlev değiştirmek zorunda anlamına gelir.
def get_model_fields(model):
return model._meta.fields
Bu Field
nesnelerin listesini döneceğine inanıyorum. Örneğinden her bir alanın değerini almak için, getattr(instance, field.name)
kullanın.
Güncelleme: Django katkıda bulunan bir API Kodu. Google bir Yaz parçası olarak _Meta nesneyi değiştirmek için çalışıyoruz Bkz:
- https://groups.google.com/forum/#!topic/django-developers/hD4roZq0wyk
- https://code.djangoproject.com/wiki/new_meta_api
Django dinamik model alanları...
Django: string model Olsun?...
Django model alanları doğrulama...
Django özel alanları ile uzanan Kullan...
Model alan Güney kullanarak yeniden ad...