Проблема с установкой начального Django значения поля ModelForm - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь установить значение по умолчанию в форме (поле является датой публикации статьи «public»), но при загрузке формы на странице поле остается пустым. Я попытался установить значение по умолчанию в поле "заголовок" (любое значение, не обязательно сегодняшняя дата) - также не отображается.

форма:

from main.models import Article
from datetime import datetime


class AddArticleForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(AddArticleForm, self).__init__(*args, **kwargs)
        self.fields['publish'].initial = datetime.now()

    class Meta:
        model = Article
        fields = ('title', 'author', 'body', 'publish', 'status')
        labels = {
            'body': 'Text'
        }
        widgets = {
            'title': forms.TextInput(attrs={'class': 'md-form'}),
            'author': forms.TextInput(attrs={'class': 'md-form'}),
            'body': forms.Textarea(attrs={'class': 'md-textarea', 'rows': 3}),
            'publish': forms.DateTimeInput(attrs={'class': 'md-form'}),
            'status': forms.Select(attrs={'class': 'custom-select'})

        }

просмотров:

def add_article(request):
    form = AddArticleForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('/articles/')
    args = {
        'form': form
    }
    return render(request, 'html/add_article.html', args)

html:

...
<form action="." method="post" class="add-article">
            {% csrf_token %}
            {% for field in form %}
                <div class="md-form">
                    {% if field.name != 'status' and field.name != 'publish' %}
                        <label for="{{ field.name }}">{{ field.label }}</label> {{ field }}
                    {% else %}
                         <label for="{{ field.name }}"></label> {{ field }}
                    {% endif %}
                </div>
            {% endfor %}
            <button type="submit" class="btn btn-pink btn-block">Share</button>
        </form>
...

The form

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Возможно, проблема в том, что вы отправляете request.POST в качестве аргумента классу формы, даже если это запрос GET.

form = AddArticleForm(request.POST)
                      ^^^^^^^^^^^^^

Поэтому я предлагаю обновить представление следующим образом:

def add_article(request):
    form = AddArticleForm(request.POST or None)
    if request.method == "POST":
        if form.is_valid():
            form.save()
            return redirect('/articles/')
    context = {
        'form': form
    }
    return render(request, 'html/add_article.html', context)

Таким образом, он будет обрабатывать POST запросов в явном виде и отправлять request.POST в качестве аргумента только при наличии request.POST.

0 голосов
/ 04 марта 2020

Я думаю, вы должны добавить начальный аргумент в форму поля. Например:

name = forms.CharField(initial='Your name')

Вот документация по этому вопросу: https://docs.djangoproject.com/en/3.0/ref/forms/fields/#initial

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