Как объединить ключ / значения формы в строку и присвоить ее переменной Django? - PullRequest
0 голосов
/ 23 сентября 2019

Новое в веб-разработке Django и python.

Существует страница обзора с текстовым полем, в которой клиенты пишут свой отзыв о посещении завода.При нажатии отправить его отправляется на почту менеджера в виде текстового файла.

Мой работодатель хочет, чтобы он больше походил на страницу опроса, поэтому он попросил изменить текстовое поле для ввода на основе формы, где клиенту предоставляется несколько меток и входных данных, как показано ниже.при нажатии кнопки «Отправить» необходимо создать текстовый файл с указанной ниже информацией и отправить его по почте.

Name : 

Phone :

email :

precaution and safety gears given: [yes/no]

Unit 1 ambience: [Very satisfied/Satisfied/Neutral/Unsatisfied/Very unsatisfied]

Unit 2 ambience: [Very satisfied/Satisfied/Neutral/Unsatisfied/Very unsatisfied]

Unit 3 ambience: [Very satisfied/Satisfied/Neutral/Unsatisfied/Very unsatisfied]

General feedback : /text box for detailed review if any/

значения, указанные в [], являются раскрывающимися значениями.

наш веб-сайт, созданный на платформе Django.Ниже приведен файл шаблона, используемый на странице обзора.

<code>{% extends 'page1.tmpl' %}
    <form id="reviewform" method="post" action="/sjfacweb/revfile/save">
        <pre><textarea name="review" id="review">{{ review }}</textarea>
Сохранить {% endblock content%}

views.py

@require_POST
@csrf_protect
def revfile_save(request):
   """
   This page processes and saves review file.
   """
   review = request.POST.get('review', "").replace('\r\n','\n')
   reviewfile_name = "/root/sjfacweb/" + remote.sjfacweb()
   remote.write_reviewfile(reviewfile_name,False,review)

Я думаю, что переменная django 'review' захватывает всю строку, набранную клиентом, и сохраняет ее какфайл.

Предположим, если шаблон выглядит следующим образом,

<code>{% extends 'page1.tmpl' %}
    <form id="reviewform" method="post" action="/sjfacweb/revfile/save">
        Name: <input type="text" name="Name" value=""><br>
        Phone: <input type="text" name="Phone" value=""><br>
        email: <input type="email" name="email" value=""><br> 
        precaution and safety gears given: 
        <select>
            <option value="yes">yes</option>
            <option value="No">No</option>
        </select>
        <br>
        Unit 1 ambience:
        <select>
            <option value="Very Satisfied">Very Satisfied</option>
            <option value="Satisfied">Satisfied</option>
            <option value="neutral">neutral</option>
            <option value="Unsatisfied">Unsatisfied</option>
            <option value="Very Unsatisfied">Very Unsatisfied</option>
        </select>

        <pre><textarea name="review" id="review"></textarea>
Сохранить {% endblock content%}

Как преобразовать все метки / значения в форме в одну строку и присвоить переменной django {{review}}?

Спасибо,

Мохан

1 Ответ

2 голосов
/ 23 сентября 2019

В Django ожидается, что он будет обрабатывать формы полностью с помощью Django Forms , поэтому лучше создать файл forms.py в папке приложения и затем выполнить что-то вроде этого:

from django.forms import forms

class ReviewForm(forms.Form):
    PRECAUTIONS_CHOICES = (
        ('no', 'No'),
        ('yes', 'Yes')
    )
    UNIT1_CHOICES = (
        ('Very Satisfied', 'Very Satisfied'),
        ('Satisfied', 'Satisfied'),
        ('neutral', 'neutral'),
        ('Unsatisfied', 'Unsatisfied'),
        ('Very Unsatisfied', 'Very Unsatisfied'),
    )
    name = forms.Charfield()
    phone = forms.Charfield()
    email = forms.EmailField()
    precautions = forms.ChoiceField(choices= PRECAUTIONS_CHOICES, widget=forms.Select())
    unit1_ambience = forms.ChoiceField(choices= UNIT1_CHOICES, widget=forms.Select())
    review = forms.CharField(widget=forms.Textarea())

    def clean(self):
        # after checking every field is available and then concat values to each other

        if 'name' in self.cleaned_data and 'phone' in self.cleaned_data and ... :
            name = self.cleaned_data.get('name')
            phone = self.cleaned_data.get('phone')
            ...
            review = self.cleaned_data.get('review')
            expected_string = name + '\n' + phone + ... + review
            # concat all with review and then return string
            return expected_string

и затем в вашей функции просмотра сделайте что-то вроде этого

from .forms import ReviewForm

def revfile_save(request):
    form = ReviewForm(request.POST)
    if form.is_valid():
        review = form.cleaned_data

, вы даже можете создать методы, такие как def clean_name(self) и проверить, являются ли входные данные пустыми, или выполнить дополнительную проверку каждого поля перед вызовом метода Clean

Имейте в виду, что вы можете делать гораздо больше с формами django и ModelForms, поэтому лучше читать документы

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