2011-02-17 21 views
7

Seçenekleri dinamik olarak ayarlamak istiyorum.Django choicefield ile dinamik olarak seçenekler nasıl ayarlanır?

__set_choices yöntemini kullandım, ancak istek yöntemi POST olduğunda, is_valid yöntemi her zaman False değerini döndürür. Başka bir modele bir ForeignKey sahip bir model ile bir ModelForm varsa

maersu çözümüne benzer
class MyForm(BaseForm): 
    afield = forms.ChoiceField(choices=INITIAL_CHOICES) 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['afield'].choices = my_computed_choices 
+1

"__set_choices yöntemi" nedir? Bu ne işe yarıyor? Ne diyor? Formunuz nedir? –

cevap

15

Sık sık yapıcı içinde dynamicly seçimler set seçimler yerine alanın sorgularını atayın.

+1

Teşekkürler, Güzel Çözüm, uygulaması çok kolaydır. – shahjapan

0

ancak, sen isteyebilirsiniz:

 
if request.method=='POST': 
_form = MyForm(request.POST) 
if _form.is_valid(): 
    #something to do 
3

anahtar choices herhangi iterable olabileceğini fark şudur: Eğer my_choices içeride mi

import uuid 
from itertools import count 
class MyForm(BaseForm): 

    counter = count(1) 

    @staticmethod 
    def my_choices(): 
     yield (uuid.uuid1, next(counter)) 

    afield = forms.ChoiceField(choices=my_choices) 

Ya ne olursa olsun mantığı. Aşağıdaki

--views.py

lstChoices = _getMyChoices() 

form.fields['myChoiceField'].choices = lstChoices 

lstChoices yapabileceği bir görünümde

1

seçimler için dinamik olarak oluşturulmuş dizilerini listesidir.

+0

Evet, ancak sonra form doğrulama hala başarısız olur. (django 1.8) – FizxMike

İlgili konular