2012-11-03 12 views
5

Próbuję przyjąć chrupiące formy i bootstrap i wykorzystać jak najwięcej ich funkcjonalności, jak to możliwe, zamiast wymyślać coś w kółko.django formularze w formie chrupkiej formy

Czy istnieje sposób na zachowanie funkcjonalności formularzy inline przy użyciu chrupiących formularzy/bootstrap, takich jak formularze django-admin?

Oto przykład:

class NewProjectForm(forms.Form): 
    name = forms.CharField(required=True, label=_(u'Название проекта'), widget=forms.TextInput(attrs={'class':'input-block-level'})) 
    group = forms.ModelChoiceField(required=False, queryset=Group.objects.all(), label=_(u'Группа проектов'), widget=forms.Select(attrs={'class':'input-block-level'})) 
    description = forms.CharField(required=False, label=_(u'Описание проекта'), widget=forms.Textarea(attrs={'class':'input-block-level'})) 

    class Meta: 
     model = Project 
     fields = ('name','description','group') 

    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.form_class = 'horizontal-form' 
     self.helper.form_action = 'submit_new_project' 
     self.helper.layout = Layout(
      Field('name', css_class='input-block-level'), 
      Field('group', css_class='input-block-level'), 
      Field('description',css_class='input-block-level'), 
     ) 
     self.helper.add_input(Submit('submit',_(u'Создать проект'))) 
     self.helper.add_input(Submit('cancel',_(u'Я передумал'))) 
     super(NewProjectForm, self).__init__(*args, **kwargs) 

wyświetli przyzwoitą formę:

example of single form rendered with crispy-forms

Jak mogę iść o dodanie formularz, który zasadniczo reprezentuje ten model:

class Link(models.Model): 
    name = models.CharField(max_length=255, blank=False, null=False, verbose_name=_(u'Название')) 
    url = models.URLField(blank=False, null=False, verbose_name=_(u'Ссылка')) 
    project = models.ForeignKey('Project') 

Tak więc będzie projekt i nazwy/adresy URL i droga do reklamy d wiele, podobnie jak to samo robi się w django-admin, gdzie możesz dodać dodatkowe "wiersze" z danymi związanymi z twoim głównym modelem. Na poniższym ekranie możesz wypełnić dane dla obiektu "Pytanie", a poniżej możesz dodać dane dla obiektów QuestionOption - możesz kliknąć ikonę "+", aby dodać tyle pytań, ile chcesz.

Nie szukam sposobu na automatyczne wygenerowanie formularzy z modeli (to jest ładne, ale nie najważniejsze) - czy istnieje sposób na skonstruowanie formularza, który pozwoli Ci dodać "wiersze" danych, takich jak django-admin to robi?

screenshot of django-admin

Odpowiedz

6

Formy wstawiane, do których się odnosisz, są znane w Django jako Formsets. Jeśli chcesz dowiedzieć się więcej o formularzach, możesz je znaleźć pod adresem the Django forms documentation.

Chrupiące podpory renderingu inline formsets, opisane w the section 'Rendering Formsets'

Uwaga formsets domyślnie Pokaż 3 dodatkowych form inline, co pozwala dodać jeszcze trzy obiekty. Po zapisaniu otrzymujesz jeszcze trzy dodatkowe wbudowane zestawy formularzy, aby dodać jeszcze więcej.

Jeśli chcesz dodać przycisk "dodaj więcej", tak jak w administratorze Django, musisz użyć JavaScript, aby dynamicznie dodać te wiersze.

+0

To pytanie dotyczy bardziej dynamicznych przycisków "dodaj więcej": http://stackoverflow.com/questions/501719/dynamic-adding-a-forma-do-a-django-formset-w-ajax – publysher

Powiązane problemy