перезаписать форму для django CreateView - PullRequest
0 голосов
/ 07 ноября 2018

Возможно, просто еще один глупый вопрос для начинающих: У меня проблемы с перезаписью формы модели django, которая в настоящее время использует следующий код в views.py.

Код ниже работает хорошо!

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    fields = ['title', 'content']

    ### want this instead of line 1 and 2 above --> form_class = PostCreateForm()

    view_args = collections.namedtuple('view_args', ['page_title'])
    view_args = view_args(page_title="Create Post")

    def get_context_data(self, *args, **kwargs):
        self.tgt_url_args = MyHelper.parse_tgt_url(self)
        context = super(PostCreateView, self).get_context_data(*args, **kwargs)
        context.update(MyHelper.get_context_metadata(self, self.tgt_url_args, PostCreateView.view_args))
        return context

    def form_valid(self, form):
        form.instance.author = self.request.user
        tgt_url_args = MyHelper.parse_tgt_url(self)
        blog_article = Article.objects.get(pk=tgt_url_args.get('Article', '0'))
        form.instance.article_field = blog_article
        return super().form_valid(form)

Однако я хотел бы перезаписать форму, чтобы добавить заполнитель в поля. Поэтому я заменяю строки 1 и 2 на:

form_class = PostCreateForm()

Я также добавил следующие слова в forms.py:

from django import forms
from . models import Post


class PostCreateForm(forms.ModelForm):


    class Meta:
        model = Post
        fields = ['title', 'content']

print('imported PostCreateForm')

Однако, когда я импортирую и запускаю это, я получаю следующую ошибку:

'PostCreateForm' object is not callable

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 07 ноября 2018

Вы должны , а не передать построенную форму, только ссылку на форму class :

class PostCreateView(LoginRequiredMixin, CreateView):
    model = Post
    form_class = <b>PostCreateForm</b>  # no parenthesis

    # ...

Таким образом, Django каждый раз создает новую форму (в зависимости от ситуации с request.POST и т. Д.).

Если вам нужно передать дополнительные параметры в форму, вы можете указать словарь в get_form_kwargs [Django-doc] .

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