0

Ich verwende derzeit CreateView für die Klasse Order.Wie kann man die Formularvariable aus einer klassenbasierten generischen Ansicht in Django anpassen?

Ein Teil der urls.py sieht wie folgt aus

url(
    r'^orders/create/$', 
    CreateView.as_view(
     model = Order, 
     template_name = 'doors/orders/create.html' 
    ), 
    name = 'orders_create' 
), 

Wenn ich einfach eine {{ form }} in einem oors/orders/create.html tun, dann wird es alle Felder in models.py erklärt angezeigt werden soll.

Was ist der beste Weg, um das Aussehen der einzelnen Felder anpassen und sogar zu steuern, ob sie überhaupt sichtbar sind oder nicht (einige Felder sind optional)?

Antwort

1

Um den Teil Ihrer Frage zu beantworten, welche Felder des Modells im Formular verfügbar sein sollen, können Sie ein benutzerdefiniertes Formular mit ModelForm erstellen. Die Optionen fields und exclude definieren, welche Felder in der Form zur Verfügung stehen:

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form

Sie würden dann die CreateView sagen Sie Ihr benutzerdefiniertes Formular zu verwenden, indem form_class Zugabe:

url(
    r'^orders/create/$', 
    CreateView.as_view(
     model = Order, 
     template_name = 'doors/orders/create.html', 
     form_class = OrderCreateForm, 
    ), 
    name = 'orders_create' 
), 

In Bezug auf dem zweiten Teil Ihre Frage (wie Sie das Formular und seine Felder formatieren), können Sie {{ form.as_p }}, {{ form.as_table }} verwenden oder eine vollständig benutzerdefinierte Vorlage zusammenstellen:

https://docs.djangoproject.com/en/dev/topics/forms/#displaying-a-form-using-a-template

+0

Also soll ich das 'OrderCreateForm' in' models.py' erstellen? – hobbes3

+0

Es ist eine gute Übung, Ihre benutzerdefinierten Formulare in einem Modul namens 'forms.py' zu speichern (auf derselben Ebene wie Ihre' models.py'). – mbaechtold

+0

Ich habe die Dokumentation gelesen, die Sie verlinkt haben und [ihr vollständiges Beispiel hat alle Formularklassen richtig platziert neben den Modellklassen] (https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#a-full-example). Also die Dokumentation gab ein schlechtes Beispiel? – hobbes3

Verwandte Themen