Я начниающий джангист, использую Django 2.7.1 и Python 3.7.2. Пытаюсь сделать штуку, которая будет получать данные из Form Fields на сайте и обрабатывать их, а потом выводить результат в другой Form Field на той же странице.
Я пытался решить всё это дело через методы моделей, но так и не понял как ими пользоваться, так что решил попробовать написать функции во views.py.
Также в процессе поисков познакомился с celery и прочими аналогичными асинхронными решениями, но как оказалось мне это не поможет, потому что я не понимаю самой сути.
В общем, теперь кажется я начинаю понимать, но совершенно не врубаю как отрендерить результат по нажатию кнопки с POST-запросом.
Код приведён ниже.
Это 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>
Я ожидаю что поле 'results' на сайте обновится после нажатия кнопки и в него запишется значение
self_handle
из
views.py
, но этого не происходит.
print
выводятся корректно.