Форма, Модель, Модель Форма - PullRequest
2 голосов
/ 23 августа 2010

Теперь я могу создать все необходимые поля БД в моих моделях.

Я могу создавать формы для доступа к этим моделям.

А если я создаю формы из моделей:

http://docs.djangoproject.com/en/dev/topics/forms/modelforms/

Я не могу понять, почему я должен переопределить поля следующим образом:

class AuthorForm(forms.Form):
    name = forms.CharField(max_length=100)
    title = forms.CharField(max_length=3,
                widget=forms.Select(choices=TITLE_CHOICES))
    birth_date = forms.DateField(required=False)

Почему я должен определять CharField здесь? Разве я не делал этого в models.py уже?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 23 августа 2010

Опираясь на то, что 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 только один из них.

1 голос
/ 23 августа 2010

Вы используете forms.Form вместо forms.ModelForm и объявляете, какую модель вы используете (в class Meta). Может в этом проблема. Не могли бы вы описать, для какой модели у вас возникла проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...