Python Django формы, форма не работает с введенными данными - PullRequest
0 голосов
/ 16 мая 2018

Я новичок с Джанго и пытаюсь добавить свою форму

My forms.py

class MyOwnForm(forms.ModelForm):
    class Meta:
        model = Album
        fields = ['username']

Мои views.py

def testing_Form(request):
    if not request.user.is_authenticated:
        return render(request, 'login.html')
    else:
        form = MyOwnForm(request.POST or None)
        if form.is_valid():
            album = form.save(commit=False)
            album.user = request.user
            username = form.cleaned_data['username']

        return render(request, 'form.html', {'form': form})

my form.html

<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {% include 'form_template.html' %}
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-success">Submit</button>
        </div>
    </div>
</form>

и последний form_template.html

{% for field in form %}
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <span class="text-danger small">{{ field.errors }}</span>
        </div>
        <label class="control-label col-sm-2" >{{ field.label_tag }}</label>
        <div class="col-sm-10">{{ field }}</div>
    </div>
{% endfor %}

Когда я открываю веб-страницу формы, я получаю пустое поле ввода и кнопку отправки. Но когда я нажимаю эту кнопку. Страница перезагружается и ничего более.

что мне нужно сделать, чтобы я мог работать с введенными данными?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Но когда я нажимаю эту кнопку.Страница перезагружается и ничего более.

Из-за этого я предполагаю, что вы намереваетесь показать некоторую информацию после отправки формы.Вот простой пример, который просто отображает подтверждение после отправки формы.

{% if submitted %}

    <div class="jumbotron contactainer">
        <h1 class="display-4">Submitted</h1>
        <hr class="my-4">
        <p class="lead">{{ username }}'s album has been submitted</p>
    </div>

{% else %}


<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {% include 'form_template.html' %}
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-success">Submit</button>
        </div>
    </div>
</form>

{% endif %}

views.py

def testing_Form(request):
    submit = False
    if not request.user.is_authenticated:
        return render(request, 'login.html')
    else:
        form = MyOwnForm(request.POST or None)
        if form.is_valid():
            album = form.save(commit=False)
            album.username = request.user
            album.save()
            submit = True 
            username = form.cleaned_data['username']
            return render(request, 'form.html', {'username':username, 'submitted':submit})
        else:
            return render(request, 'form.html', {'form': form, 'submitted':submit})

Вы можете делать все, что пожелаете, с переменной username или добавлять новые переменные, просто не забудьте добавить их вконтекстный словарь, если вы хотите отобразить их.Переменная submit, которую я добавил, используется в шаблоне, чтобы определить, что показывать.Надеюсь, это поможет:)

0 голосов
/ 16 мая 2018

Не совсем уверен, чего именно вы пытаетесь достичь.Тем не менее, если вы хотите отобразить значение вашей предыдущей отправки на экране, например: Previous submitted username: <input username>, вы можете использовать определенный form в своем шаблоне, включая значения, если ранее была отправка.

{% if form.username.value %}
    Previous submitted username: {{ form.username.value }}
{%  endif %}

<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
    {# ... all as it was ... #}
</form>

Вы всегда можете добавить дополнительный контекст в свой шаблон, назначив его в словарь контекста аналогично тому, как вы сделали с {'form': form} как {'form': form, 'hello': "My hello string"} в вашем представлении.В вашем шаблоне вы теперь можете использовать {{ hello }} в качестве переменной.

Обратите внимание, что вы также используете commit=False в своей форме для добавления дополнительных данных запроса в модель после (user).В настоящее время вы оставили его в состоянии unsaved.Чтобы сохранить новую запись формы, вам нужно позвонить album.save() после внесения изменений.

if form.is_valid():
    album = form.save(commit=False)
    album.user = request.user
    album.save() # now commit

username = form.cleaned_data['username'] был определен, но никогда не использовался.Что в приведенном выше примере больше не требуется.

Вы можете выбрать объекты альбома, когда пользователь прошел аутентификацию, и передать их в шаблон для работы в качестве контекста, например:
(стиль плохой практики, но просточтобы дать вам представление в рамках вашего кода)

if request.user.is_authenticated:
    return render(request, 'login.html')
else:
    form = AlbumForm(request.POST or None)

    if form.is_valid():
        album = form.save(commit=False)
        album.user = request.user

    albums = Album.objects.all()

    return render(request, 'formhandle/form.html', {'form': form, 'albums': albums})

, которые вы можете показать в шаблоне формы как:

{% if form.username.value %}
    Previous submitted username: {{ form.username.value }}
{%  endif %}

<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
    {# ... all as it was ... #}
</form>

<ul>
    {% for album in albums %}
        <li>{{ album.user.username }}</li>
    {% endfor %}
</ul>

enter image description here

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