SORU
5 EYLÜL 2010, Pazar


'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.

django object get/set field

http://www.djangofoo.com/80/get-list-model-fields

How to introspect django model fields?

CEVAP
5 EYLÜL 2010, Pazar


_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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 30GB

    30GB

    14 AĞUSTOS 2006
  • bobono1baby

    bobono1baby

    14 AĞUSTOS 2011
  • Paste Magazine

    Paste Magazi

    28 AĞUSTOS 2008