Несвязанная ошибка при наличии двух Django форм на одной странице HTML - PullRequest
0 голосов
/ 17 марта 2020

Я создал простое приложение ToDo List, используя Django. Недавно я работал над добавлением сроков к каждой задаче / задаче. Это тоже отлично работает. Но чтобы добавить срок выполнения к любой задаче, пользователям нужно будет go перейти на другой URL, а затем добавить дату. То, что я хочу сделать, - это указать дату исполнения Django прямо на главной странице под каждым заданием. Когда я пытался выполнить sh, я смог успешно отобразить соответствующую форму под каждой задачей, но когда я вводил день и нажимал клавишу ввода, Django выдает Unbound Local Error. Две формы, которые у меня есть на моей единственной домашней странице, это todo_form, которое представляет собой единственное поле ввода, которое используется для создания новых задач на домашней странице, и это due_form, которое будет обрабатывать сроки исполнения.

Это моя view.py home функция

def home(request):
    if request.method == "POST":
        if "due_form" in request.POST:
            due_form = DueDateForm(request.POST)

            if due_form.is_valid():
                days = due_form.cleaned_data.get("due_date")

                if days == "today":
                    days = 0
                elif days == "tomorrow":
                    days = 1
                elif days == "next week":
                    days = 7
                elif days == "yesterday":
                    days = -1
                elif days == "last week":
                    days = -7
                else:
                    days = int(days)

                today = datetime.datetime.today()
                due_date = today + datetime.timedelta(days=days)

                todo = ToDo.objects.get(pk=int(request.POST.get("id")))
                todo.due_date = due_date
                todo.save()

                messages.success(request, "Due Date added to task")

                return redirect("todo-home")

            add_form = NewTaskForm()

        elif "add_form" in request.POST:
            add_form = NewTaskForm(request.POST)

            if add_form.is_valid():
                title = add_form.cleaned_data.get("title")
                todo = ToDo(title=title)
                todo.creator = request.user
                todo.save()

                user = User.objects.get(username=request.user.username)
                user.profile.todos += 1
                user.save()
                messages.success(request, "Your new task has been added")

                return redirect("todo-home")

            due_form = DueDateForm()

    else:
        add_form = NewTaskForm()
        due_form = DueDateForm()

    todos = ToDo.objects.all()

    context = {
        "todos": todos,
        "add_form": add_form, # This is line 98 (that is, where the error occured)
        "due_form": due_form
    }

    return render(request, "ToDo/home.html", context=context)

Части моего дома. html это актуально

<!-- The "todo_form" that handles new tasks -->
<div class="content section">
    <form method="POST" name="add_form">
        {% csrf_token %}
        <fieldset class="form-group dark-mode-assist">
            <legend class="border-bottom mb-4">New ToDo!</legend>
            {{ add_form|crispy }}
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit" name="add-task">Add</button>
            </div>
        </fieldset>
    </form>
</div>
.
. { some HTML code that handles task title and other meta data }
.
<!-- This is the "due_form" -->
<div class="content section">
    <form method="POST" name="due_form" id={{ todo.pk }}>
       {% csrf_token %}
       <fieldset class="form-group dark-mode-assist">
          <legend class="border-bottom mb-4">Due in (days)</legend>
          {{ due_form|crispy }}
       </fieldset>
       <div class="form-group">
           <button class="btn btn-outline-info" type="submit">Add</button>
        </div>
     </form>
</div>

Это ошибка, я видя My error details about the UnboundLocalError

1 Ответ

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

В подобных ситуациях не заканчивается:

else:
    add_form = NewTaskForm()
    due_form = DueDateForm()

Вместо этого перед первым оператором if по умолчанию эти переменные.

add_form = NewTaskForm()
due_form = DueDateForm()
if ...:
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...