2012-08-28 12 views
28

Model alanları 'seçenekler' değerine erişmek için bir yol (bir form kullanmadan) var mı? ve sana get_fieldname_display() işlevi aradığınız düşünüyorum bir görünüm veya şablonErişim Django field.choices

cevap

3

ya değerlerin listesini almak -

Ben field.choices gibi bir şey yapmak istiyorum.

34

Elbette, bir Model alanının choice özniteliğine erişin.

MyModel._meta.get_field('foo').choices 
my_instance._meta.get_field('foo').choices 
+0

ile seçimler geri alabilirsiniz? –

+1

Görünümünüzde erişilebilir olan her şey şablona erişilebilir, sadece şablon içeriğine aktarmanız yeterlidir. Bu bir alt çizgi ile başlayacağından, alan örneğini içeriğe manuel olarak iletmeniz gerekir. –

+0

Mükemmel! Tam olarak ben kaynak lol içinde arama yapmaya çalışıyorum .. – Amyth

4

böyle seçimlerinizi ilan ediyorsanız: gerçekten bunu yapmanın iyi bir yoludur

class Topic(models.Model): 

    PRIMARY = 1 
    PRIMARY_SECONDARY = 2 
    TOPIC_LEVEL = ((PRIMARY, 'Primary'), 
        (PRIMARY_SECONDARY, 'Primary & Secondary'),) 

    topic_level = models.IntegerField('Topic Level', choices=TOPIC_LEVEL, 
      default=1) 

. Bkz: http://www.b-list.org/weblog/2007/nov/02/handle-choices-right-way/

Sonra sadece benim django şablonları onları isteseydi ne Topic.TOPIC_LEVEL

+0

Bu şekilde benim görüşüme göre kullanıyorum, ancak "Birincil, Birincil ve İkincil" (yukarıdaki örnekte olduğu gibi) almak yerine, (PRIMARY, 'Primary'), (PRIMARY_SECONDARY, 'Primary &) olsun İkincil ')'. Neden böyle ve nasıl tamir edilir? –

+1

@LjubisaLivac Nedeni, "TOPIC_LEVEL" değişkenini çiftlerin tuple'ı (database_value, 'readable_value') olarak bildirmiş olmanızdır ve şimdi siz tam olarak girişiniz olduğu gibi alıyorsunuz. Bunu yapmanın birçok avantajı vardır, bunlardan biri kodunuzu işleyen bir sonraki kişi için okunabilirliktir. Bu kırık değil: Birçok uygulama, insanlar tarafından okunmak yerine gerçek veritabanı değerine sahip olmayı tercih ediyor. Sadece dizeleri istiyorsanız, bunları [Topic.TOPIC_LEVEL] içinde i [i [1] ile alabilirsiniz. –