2010-03-05 18 views
5

Bunu yapmanın kolay bir yolu var mı?Model alan seçimleri özelliğini çalışma zamanında mı ayarlayın?

+0

Merak etme, bunun için kullanım durumunuz nedir? –

+0

Seçimler listesini veritabanından almaya çalışıyorum. Ayrıca çeviri kullanıyorum ve veritabanına girdiklerinden, çeviri dizesini etiketleyemiyorum. –

+0

Bu seçenekler kullanıcılara mı maruz kalıyor veya sadece iç mantık için kullanılıyor mu? Bu, formlar düzeyinde ele alınabilecek bir şey olup olmadığını merak ediyorum, çünkü orada dinamik olarak seçim yapmak çok daha yaygın. Model seviyesindeki seçeneklerin değiştirilmesi, ilk etapta modele karar vermenin amacını ortadan kaldırıyor gibi görünüyor. Belki bu farklı bir şekilde ele alınabilir mi? –

cevap

2

herhangi iterable ilişkilendirme İstediğiniz seçenekleri hesaplayan fonksiyon. Django bunu başladıktan sonra http://docs.djangoproject.com/en/1.1/ref/signals/#post-init

Bu, modele erişmek verecek ve böylece o zaman seçimler ayarlayabilirsiniz:

Ayrıca Modeli post_init sinyali kullanarak araştırmak olabilir. Muhtemelen "_meta" arayüzünü kullanarak gitmek isteyebilirsiniz:

instance._meta.get_field_by_name('FIELD_NAME')[0].choices = [<choices>...] 
+0

Neredeyse işe yaradı. Geçerli seçenekleri görebiliyorum, ancak farklı bir değere ayarlamaya çalışırsam, hatayı alıyorum: AttributeError: özniteliği ayarlayamıyorum. –

+1

Alanlar kaynağının çevresinde dolaşırken, "seçimlerin" salt okunur bir özellik olduğunu görebilirsiniz: http://code.djangoproject.com/browser/django/tags/releases/1.1.1/django/db/models /fields/__init__.py#L296 Bunun yerine "_choices" ayarlamayı deneyin. Bu, kabukta çalışır ancak istenmeyen sonuçlarla ilgili herhangi bir garanti vermeyeceğim. –

+0

EVET! Bu benim için çalışıyor. Çok teşekkürler. –

İlgili konular