Необходимо ли реализовать ModelForm в нашем проекте для реализации CreateView (CBV) в Django 2.0.2? - PullRequest
0 голосов
/ 15 декабря 2018

Я начинающий программист в среде Django и изучаю, как реализовать CreateView (представление на основе классов для создания формы на основе модели) в моем файле views.py.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Вам не нужно создавать ModelForm, вам просто нужно указать модель в атрибуте model, например, для Author набора моделей model = Author.

CreateView использует ModelFormMixin , который использует этот атрибут model для обработки ModelForm:

from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

Подробнее здесь: https://docs.djangoproject.com/en/2.1/ref/class-based-views/mixins-editing/#django.views.generic.edit.ModelFormMixin.model

0 голосов
/ 15 декабря 2018

Нет, у вас нет представления, автоматически создающего форму модели для вас, но вы должны перезаписать ее.

Предположим, у вас есть MyModel, вы можете сделать это:

from myapp.models import MyModel

# views.py

class MyCreateView(CreateView):
    model = MyModel
    fields = ['something', 'somethingelse']  # these are fields from MyModel

Если вы не укажете, fields Django выдаст ошибку.

Если вы хотите каким-то образом настроить проверку формы, вы можете сделать это:

# forms.py
class MyForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ['something']  # form fields that map to the model

        # ... do some custom stuff

# views.py
class MyCreateView(CreateView):
    model = MyModel
    form_class = MyForm

Обратите внимание, что мы больше не указываем fields для MyView, потому что, если мы захотим, он также выдаст ошибку, и причина в том, что представление будет извлекать поля из формы.

Дополнительная информация: https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-editing/

Код, который обрабатывает form_class: https://github.com/django/django/blob/master/django/views/generic/edit.py#L74

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