Кнопка редактирования Django перенаправляет на создание формы - PullRequest
0 голосов
/ 07 июня 2018

Моя кнопка редактирования Django всегда перенаправляет на мою форму Создать и создает новую запись.Я хочу функцию редактирования, которая позволяет мне редактировать существующую запись.Понятия не имею, почему он продолжает возвращать форму создания!

home.html:

{% extends 'base.html' %}

{% block content %}

{% for task in tasks %}
  <div class="row pt-3">
      <h1>{{ task.title }}</h1>
      <br>
      <p>{{ task.pub_date_pretty }}</p>
      <br>
      <p>{{ task.summary }}</p>
      <br>
      <br>
      <p>{{ task.user }}</p>
      <br>
      <br>
  </div>
  <div class="row pt-3">
    <a class="btn btn-primary" href="{% url 'edit' task.id %}">Edit</a>
  </div>
{% endfor %}

<br>
<br>

<a class="btn btn-primary" href="{% url 'create' %}">Create</a>

{% endblock %}

views.py:

    from django.shortcuts import render, redirect, get_object_or_404
    from django.contrib.auth.decorators import login_required
    from .models import Task
    from django.utils import timezone

    def home(request):
        tasks = Task.objects
        return render(request, 'home/home.html', {'tasks': Task.objects.all().order_by('-pub_date')})

    def taskdetail(request, task_id):
        task = get_object_or_404(Task, pk=task_id)
        return render(request, 'home/taskdetail.html', {'task':task})

    @login_required
    def create(request):
        if request.method == "POST":
            if request.POST['title'] and request.POST['description']:
                task = Task()
                task.title = request.POST['title']
                task.description = request.POST['description']
                task.pub_date = timezone.datetime.now()
                task.completed = False
                task.user = request.user
                task.save()
                return render(request, 'home/taskdetail.html', {'task':task})

            else:
                return render(request, 'home/create.html', {'error':'All fields are required'})
        else:
            return render(request, 'home/create.html')

    @login_required
    def edit(request, task_id):
        if request.method == "POST":
            if request.POST['title'] and request.POST['description']:
                task = Task(pk=task_id)
                task.title = request.POST['title']
                task.description = request.POST['description']
                task.pub_date = timezone.datetime.now()
                task.completed = False
                task.user = request.user
                task.save(pk=task_id)
                return render(request, 'home/taskdetail.html', {'task':task})

            else:
                return render(request, 'home/create.html', {'error':'All fields are required'})
        else:
            return render(request, 'home/create.html')

    @login_required(login_url="/accounts/signup")
    def delete(request, task_id):
        if request.method == "POST":
            task = get_object_or_404(Task, pk=task_id)
            task.delete()
            return render(request, 'home', {'task':task})

urls.py:

from django.urls import path, include
    from . import views

    urlpatterns = [
        path('create', views.create, name='create'),
        path('<int:task_id>', views.taskdetail, name='taskdetail'),
        path('edit/<int:task_id>', views.edit, name='edit'),
        path('delete/<int:task_id>', views.delete, name='delete'),
    ]

Я несколько раз сбрасывал сервер и очищал кеш браузера, но

Понятия не имею, почему он не отправляет меня в окно редактирования

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Эта строка в функции edit: return render(request, 'home/create.html')

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

0 голосов
/ 07 июня 2018

Когда вы скопировали свой метод edit(), вы забыли изменить имена шаблонов внизу.

return render(request, 'home/create.html')
...