2017-01-29 6 views
0

Ich habe zwei Fragen zu Modellen und Formen.Python/Django - Generieren von Formen für Modelle.

1) Was ist der beste Weg, um automatisch Formulare für die Modelle zu erstellen?

Im folgenden Beispiel habe ich zwei Modelle - ModelA und ModelB. Ich brauche Formulare für sie - ModelAForm und ModelBForm. Sie sollten automatisch definiert werden. Ich möchte es nicht manuell machen, weil ich in Zukunft andere Modelle hinzufügen werde und alle Formulare gleich aussehen werden. Ich denke darüber nach, einen speziellen Decorator für Modelle zu erstellen und modelform_factory zu verwenden.

2) Angenommen, ich verwende nur ModelForm-Formulare, ist es möglich, das Formular für das Modell zu finden? Beispiel. Ich habe zwei Modelle ModelA und ModelB und zwei Formen ModelAForm und ModelBForm. Ich habe eine Instanz von ModelA und ich möchte die richtige Form für dieses Modell identifizieren, die ich an die Vorlage übergeben werde - in diesem Fall ModelAForm.

+1

Sie können alles, was Sie für extensiv in der [django Dokumentation] erklärt gefragt finden (https://docs.djangoproject.com/en/1.10/ref/ klassenbasierte Ansichten/generische Bearbeitung /). – trixn

Antwort

1

Da ist ModelForm in Django. Hier ist Fragment der Dokumentation und Link dafür. https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/

class ArticleForm(ModelForm): 
    class Meta: 
     model = Article 
     fields = ['pub_date', 'headline', 'content', 'reporter'] 

Sie sind wahrscheinlich für generische Klasse-basierte Ansichten suchen, wo man nur form_class und model Instanzen passieren, alles andere django Griffe ohne Ihre Hilfe. Verbindung für sie - https://docs.djangoproject.com/en/1.10/ref/class-based-views/

+0

Ich weiß, dass es eine ModelForm gibt. Aber auf der Basis Ihres Beispiels möchte ich ArticleForm, auf der Basis von Artikel automatisch generieren. – hakubaa

+0

Das Maximum, was Sie erhalten können, ist 'fields = '__all __', um automatisch Formularfelder für alle Modellfelder zu generieren. Aber mehr als das ist es unmöglich mit nur Django. –

2

Django bietet einige generic editing views. Sie müssen nur ein Modell angeben und die Ansicht generiert das Formular automatisch. Wenn Sie die Formulare zum Erstellen oder Aktualisieren von Instanzen verwenden möchten, können Sie sie einfach verwenden.

Wenn Sie wirklich die Formulare selbst erstellen müssen, können Sie die modelform_factory verwenden, die diese Ansichten verwenden, um das richtige Formular für Ihr Modell zu erstellen. Aber ich würde zuerst mit den generischen Ansichten gehen, solange sie an Ihre Bedürfnisse angepasst werden können.

Übergeben Sie einfach Ihr Modell und optional die gewünschten Felder. Wenn Sie die Felder weglassen, werden alle Felder erzeugt:

from .models import MyModel 
from django.forms.models import modelform_factory 

my_form = modelform_factory(MyModel, fields=['name', 'age', 'job']) 
+0

Danke. Ich habe bereits über modelform_factory nachgedacht. – hakubaa

Verwandte Themen