2017-05-15 2 views
0

私は互いに選択フィールドとしてレンダリングしたいモデルフォームのmanytomanyオブジェクトを持っていますが、私が試したものは、お互いに鮮明なジャンゴフォームで隣り合わせにしていますクリスピーフォームはチェックボックスとしてmanytomanyfieldをレンダリングします

class ContactForm(forms.ModelForm): 
    choice = forms.ModelMultipleChoiceField(label=_('Request'),  widget=forms.CheckboxSelectMultiple(),required=False, 
             queryset=ContactFormChoices.objects.all()) 
    name = forms.CharField(label=_('Name')) 
    email = forms.EmailField(required=False, label=_('E-mail')) 
    phone_number = forms.CharField(required=False, label=_('Phone number')) 
    message = forms.CharField(widget=forms.Textarea , label=_('Message')) 

    def __init__(self, *args, **kwargs): 
     super(ContactForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.form_class = 'form-horizontal' 
     self.helper.layout = Layout(
      Field('name', css_class='input-xlarge'), 
      Field('email', css_class='input-xlarge'), 
      Field('phone_number', css_class='input-xlarge'), 
      Field('message', rows="3", css_class='input-xlarge'), 
      #'choice', 
      Field('choice'), 
      FormActions(
       Submit('submit', _('Submit'), css_class="btn-primary") 
      ) 

     ) 

    class Meta: 
     model = ContactData 
     fields = ['name','message','email','phone_number','choice'] 
とモデル:

class ContactFormChoices(models.Model): 
    ''' 
    The contact form options to show 
    ''' 
    text = models.CharField(max_length=256) 
    active = models.BooleanField(default=True) 

    def __unicode__(self): 
     return self.text 

class ContactData(models.Model): 
    ''' 
    The contact data (when customer fills in the contact form, 
    this is mailed and saved here 
    ''' 
    name = models.CharField(max_length=256,help_text=_("Name")) 
    phone_number= models.CharField(max_length=256,null=True,blank=True,default=None) 
    email = models.EmailField(max_length=256,null=True,blank=True,default=None) 
    choice = models.ManyToManyField(ContactFormChoices,blank=True,default=None) 
    message = models.TextField() 

    def __unicode__(self): 
     return self.name 

それは次のようになります。 the form horizontal checkboxes in stead of vertical

誰でも任意の提案を?

答えて

2

すごい、多くのことを検索して試した後....答えは非常に単純なように見える:

helper.layout = Layout(
     Field('name', css_class='input-xlarge'), 
     Field('email', css_class='input-xlarge'), 
     Field('phone_number', css_class='input-xlarge'), 
     Field('message', rows="3", css_class='input-xlarge'), 
     PrependedText('choice', ''), 
     FormActions(
      Submit('submit', _('Submit'), css_class="btn-primary") 
     ) 
    ) 

と、部分的にこの質問と回答を複製:BooleanField checkbox not render correctly with crispy_forms using bootstrap

関連する問題