Как поставить кнопку удаления под каждым сообщением? - PullRequest
0 голосов
/ 23 января 2020

Цель состоит в том, чтобы добавить кнопку удаления под каждым сообщением, и после ее нажатия соответствующая строка будет удалена из таблицы в базе данных.

views.py

from django.shortcuts import render, redirect
from .forms import CreatePostForm
from django.contrib import messages
from .models import CreatePost

def create_post(request):
    if request.method == 'POST':
        form = CreatePostForm(request.POST)
        if form.is_valid():
            post = form.save(commit = False)
            post.save()
            messages.success(request, f'The post has been created.')
            return redirect('home_page')
    else:
        form = CreatePostForm()
    return render(request, 'post/create_post.html', {'form': form})

def view_post(request):
    context = CreatePost.objects.order_by('-dateCreated')
    return render(request, 'post/view_post.html', {'context': context})

На данный момент существует одна страница, create_post.html, которая позволяет пользователям создавать сообщения. Существует вторая страница, view_post.html, которая позволяет пользователям видеть все сообщения с самыми последними добавленными первыми. Я хочу поместить кнопку удаления под каждым сообщением в view_post.html.

view_post. html

{% extends "home_page/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <h1>Volunteer Opportunities</h1>

    {% for x in context %}
    <h4>
        {{ x.task }}
        <small class="text-muted">Date Required: {{ x.dateRequired }}</small>
    </h4>
    <blockquote>
        <p>{{ x.description }}</p>
        <p>Date Posted: {{ x.dateCreated }}</p>
    </blockquote>
    <hr>
    {% endfor %}

{% endblock content %}

Я не уверен, если это необходимо, но ниже приведены models.py и файл проекта urls.py.

models.py

from django.db import models

class CreatePost(models.Model):
    dateCreated = models.DateTimeField(auto_now_add = True)
    task =  models.CharField(max_length = 1000)
    description = models.TextField()
    dateRequired = models.DateField(null = True)

urls.py

from django.contrib import admin
from django.urls import path, include
from home_page.views import home
from post.views import create_post, view_post

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name = 'home_page'),
    path('create_post/', create_post, name = "create_post"),
    path('view_post/', view_post, name = "view_post"),
]

1 Ответ

1 голос
/ 23 января 2020

Попробуйте это.

В вашем URL

path('delete/<int:id>', view_post.destroy),  

В вашем html внутри для

<a href="/delete/{{ x.id }}">Delete</a>  

views.py

def destroy(request, id):  
    post = CreatePost.objects.get(id=id)  
    post.delete()  
    return redirect("/yourhtml")  
...