2016-06-27 8 views
0

Ich lerne Django.Django: Wie man ModelForm und generische Ansichten verwendet

Ich habe etwas verwirrt über die Verwendung von Model Form und Generic Views.

beide Obwohl sind anders, aber was ich verstanden beide können nach form erzeugen gegeben model class

Ich habe eine andere Tabellen Ideen zu speichern, mag, Kommentare und Tags.

Ob ich model form oder generic views verwenden soll, um Ideen von Benutzern und Likes und Kommentare zu erhalten.

Ich möchte auch Layout meiner Formulare anpassen, also was wird ein besserer Weg für mich sein?

Ich möchte verstehen, wie diese Funktion nutzen von django

Antwort

1

Allgemeine Ansichten und Vordrucke sind nicht ausschließlich Konzepte; Generische Sichten werden gemacht, um die Geschäftslogik einer bestimmten Funktion zu umfassen, während ModelForms eine Form, Validierung/Datenbereinigungslogik und CRUD-Funktionalität aus der Logik des Modells erstellen.

Im folgenden Beispiel (von docs) erstellt UpdateView (eine generische Ansicht, die als Teil von Django bereitgestellt wird) ein Modellformular aus einer einzelnen Modellinstanz. Durch CBV-Konventionen wird der Primärschlüssel der zu aktualisierenden Instanz als das erste von der URL bereitgestellte Positionsargument erwartet.

In diesem Fall wird automatisch eine ModelForm generiert. Wenn eine feinere Steuerung erforderlich ist, können Sie Ihr eigenes ModelForm definieren und es dem CBV zur Verfügung stellen. Hoffentlich hilft dies, Ihre Verwirrung zu klären.

Beispiel myapp/views.py:

from django.views.generic.edit import UpdateView 
from myapp.models import Author 
from django import forms 


class MyModelForm(forms.ModelForm): 
    model = Author 
    fields = ['name', 'city', ...] 


class AuthorUpdate(UpdateView): 
    model = Author 
    form = MyModelForm 
    template_name_suffix = '_update_form' 

Beispiel myapp/author_update_form.html:

<form action="" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Update" /> 
</form> 

Beispiel myapp/urls.py

from django.conf.urls import * 
from myapp.views import AuthorUpdate 

urlpatterns = patterns('', 
    url('^update_author/(?P<pk>[\w-]+)$', AuthorUpdate.as_view(), name='update_author'), 
) 
+0

Danke. So können wir Modellformulare an generische Ansichten übergeben. – Shri

+0

Wie kann ich Felder in Templates anpassen? Wie beim benutzerdefinierten Styling. – Shri

+0

Siehe das Update zum Übergeben benutzerdefinierter ModelForms an ein CBV. Felder über die Django-Vorlagensprache anpassen. Das ist ein großes Thema, aber es gibt viele gute Tutorials! Durchlaufen Sie die Felder für ein Formular {% für das Feld in der Form%}

{{ field }}
{% endfor%} oder rufen Sie den Namen {{form.author}} für ein einzelnes Feld aus dem Formular ab. –