Опираясь на то, что gruszczy сказал , если у вас есть модель с именем Author
, вы можете объявить ModelForm
для этой модели следующим образом:
class AuthorForm(forms.ModelForm): # Note the different superclass.
class Meta:
model = Author
Если вы хотите форму, котораявключает в себя все атрибуты Author
, тогда это все, что вам нужно сделать.Однако если вам требуется только подмножество атрибутов Author
(скажем, name
и title
), вы можете изменить форму модели следующим образом:
class AuthorForm(forms.ModelForm): # Note the different superclass.
class Meta:
model = Author
fields = ('name', 'title',)
Обратите внимание, что вам не нужно было использоватьCharField
здесь.
Если, с другой стороны, вы хотите все, кроме name
и title
, то вы можете определить свою форму следующим образом:
class AuthorForm(forms.ModelForm): # Note the different superclass.
class Meta:
model = Author
exclude = ('name', 'title',)
Обновление
(После прочтения комментария) Вы можете рассматривать AuthorForm
как любую другую обычную форму .По вашему мнению, вы можете создать эту форму с данными или без данных на основе request.method
.Примерно так:
def add_author(request, *args, **kwargs):
if request.method == 'GET':
form = AuthorForm()
elif request.method == 'POST':
form = AuthorForm(request.POST.copy())
if form.is_valid():
author = form.save()
# Redirect to listing etc.
context = dict(form = form)
return render_to_response(template_name, context) # etc.
А в вашем шаблоне:
{{ form.as_p }}
Есть различных способов визуализации формы;as_p
только один из них.