2009-03-11 38 views
2

böyle çıktı şeye şeklimi istiyorum Bir Django Form içine Başlık: istakma bir

Name: ___________ 
Company: ___________ 

Interested in 
------------- 
Foo: [ ] 
Bar: [ ] 
Baz: [ ] 

Ben ortasında eklenen başlığı 'İlgilendiği' istiyorum, demek benim form çıkışı.

Bunu yapmanın bir yolu, her alan için şablon kodunu yazmak ve başlığı uygun şekilde eklemek olacaktır. Ancak bunu yapmamayı tercih ederim. İstediğimi yapacak olan formüllerle ilgili bir şey olduğunu sanıyorum.

İstediğimi yapmanın bir yolu var mı, yoksa sadece emmeye ihtiyacım var ve bunun için şablonumu yazmam gerektiğini kabul etmem gerekiyor mu?

cevap

3

FieldsetMixin ile Yönetici benzeri alanlar elde edersiniz. Böyle formunuzu oluşturun:

from django.forms import Form 
from formfieldset.forms import FieldsetMixin 


class MyForm(Form, FieldsetMixin): 
    fieldsets = (
     (u'', {'fields': ['name', 'company']}), 
     (u'Interested in', {'fields': ['foo', 'bar', 'baz']}), 
    ) 

    # rest of the form 
3

Django formsets gitmek için yol değildir: Aynı anda birden fazla nesneyi düzenlemek için gerekirse onlar kullanılır. HTML alanları daha doğru yol gibidir. İsim ve şirket alanlarını bir alan kümesine, sonra da ilgi alanlarını bir diğerine gruplayabileceğinizi hayal ediyorum.

DjangoSnippets'te bir template tag that aids the grouping bulabilirsiniz.

bu pasajı kullanarak, form ile birlikte şablona

fieldsets = (
    ('', {'fields': ('name','company')}), 
    ('Interested in', {'fields': ('foo','bar','baz')}) 
) 

Geçidi bunun gibi görünümünde gruplama tanımlayın ve

{% draw_form form fieldsets %} 

ben tercih ediyorum formu kılacak Gruplandırmayı, temel olarak sunum konusu olduğu ve görüşe ait olması gerektiği gibi, bakış açısından tanımlamak için, ama ne halt, bu iş gibi görünüyor! Bundan daha zarif görünüyor olsa

muhuk 'ın çözüm ... Bir kesmek biraz, ama sadece onun değerini işleyen bir HeaderWidget tanımlayabiliriz

+0

Bağlantıyı imi. Sonra kontrol edeceğim. Paylaşım için teşekkürler. – muhuk

+0

Bence foo, bar ve baz alanları kavramsal olarak ilgili olduğu için formda yer alıyor, sadece daha iyi görünmesi için bir başlık eklemek istemiyorum. Her nasılsa, ben sabah kahveleri çektikten sonra bu çözümlere bakacağım. :) –

0

:

from django.forms.util import flatatt 
from django.utils.html import format_html 

class HeaderWidget(forms.widgets.Widget): 
    def render(self, name, value, attrs=None): 
     attrs.update(self.attrs) 
     return format_html('<div{0}>{1}</div>', flatatt(attrs), value) 

ve

header = forms.CharField(
    widget=HeaderWidget(attrs={'class': 'my-css-class'}), 
    initial='Interested in', 
    required=False, 
    label='') 

minör olumsuz başlığı "valu alırsınız olmasıdır: o widget kullanarak istenilen noktada bir alan eklemek e "formunuzla birlikte gönderildi.