Как визуализировать данные в текстовом поле? - PullRequest
0 голосов
/ 12 апреля 2019

Я новичок в Django, использую Django 2.7.1 и python 3.7.2, пытаюсь сделать что-то, что будет принимать данные из полевых форм на моем сайте, затем обрабатывать эти данные и, наконец, отображать результат в другом поля формы на той же странице.

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

это мои models.py

from django.db import models

# Create your models here.

class CombinatorCols(models.Model):
    first_column = models.TextField("Column 1", null=True, blank=True)
    second_column = models.TextField("Column 2", null=True, blank=True)
    third_column = models.TextField("Column 3", null=True, blank=True)
    fourth_column = models.TextField("Column 4", null=True, blank=True)
    result = models.TextField("Result", help_text='Halo', blank=True,)
    def __str__(self):
        return self.first_column

это мой forms.py

from django import forms
from .models import CombinatorCols

class CombinatorForm(forms.ModelForm):
    class Meta:
        model = CombinatorCols
        fields = ('first_column', 'second_column', 'third_column','fourth_column', 'result',)

это мои views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.template import loader
from .models import Combinate,CombinatorCols
from .forms import CombinatorForm,ResultForm
# Create your views here.


def get_col(request):
    #column = get_object_or_404(CombinatorCols)
    if request.method == "POST":
        form = CombinatorForm(request.POST)
        if form.is_valid():
            column = form.save()
            column.sender = request.user
            first_handle = [i for i in column.first_column.split('\n') if i]
            second_handle = column.second_column
            third_handle = column.third_column
            fourth_handle = column.fourth_column
            column.result = first_handle
            column.save()
            print(first_handle)
            print('Naiiiceee')

    else:
        form = CombinatorForm()

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

и последнее, мой index.html

<form action="" method="post">
    {% csrf_token %}
    {{ form.as_table }}
    <input type="submit" value="Submit">
</form>

Я ожидаю обновления формы 'result' на моем сайте, но я вижу только исходную страницу. Все, что было написано в полях формы, остается на своих местах и ​​отправляет в БД. Это все ожидаемое поведение, за исключением того, что поле результата не обновляется. Печать выписок показывает корректно.

1 Ответ

0 голосов
/ 12 апреля 2019

Когда вы получаете вызов POST, после обработки формы, чтобы обновить форму в том же представлении, вам нужно повторно инициализировать ее новыми данными, которые вы хотите показать.

После сохранения результата повторно инициализируйте форму:

column.result = first_handle
column.save()
data = request.POST.dict().copy()  # add these
data["result"] = first_handle  # three lines
form = CombinatorForm(data)    # to reinitialise the form
print(first_handle)
print('Naiiiceee')

Это решит вашу проблему.

Кстати, попробуйте использовать базовые представления на основе классов для операции CRUD. Вы можете узнать о них здесь . Они сделают вашу жизнь намного проще.

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