как мне обновить / удалить контент в Django? - PullRequest
2 голосов
/ 27 мая 2020

Итак, у меня есть форма в Django, которая позволяет пользователям вести свой дневник.
Теперь я хочу добавить кнопку редактирования и кнопку удаления, но у меня ошибка. Итак, вот коды.
шаблон (деталь. html)

...
<form method='post' class="form-group">
    {% csrf_token %}
    <div class="row justify-content-center">
        <a href="{% url 'delete' authuser_id slug %}">
            <button class='btn btn-primary button-delete'>Delete</button>
        </a>
    </div>
</form>

urls.py

...
urlpatterns = [
...
    path('detail/<int:authuser_id>/<slug:slug>', views.detail, name='detail'),
    path('detail/<int:authuser_id>/<slug:slug>', views.delete, name='delete'),
]

views.py

from .models import DiaryInput
...

def detail(request, authuser_id, slug):
    todayDiary = DiaryInput.objects.get(slug=slug)
    return render(request, '/detail.html', {'todayDiary' : todayDiary})

def delete(request, authuser_id, slug):
    todayDiary = DiaryInput.objects.get(slug=slug)
    todayDiary.delete()
    return redirect('/')

Когда я go перехожу на страницу сведений определенного c дневника, я получаю сообщение об ошибке:

Обратный вариант для «удаления» с аргументами «('',) 'не найден. 1 шаблон (ы) пробовали: ['detail / detail / (? P [0-9] +) / (? P [-a-zA-Z0-9 _] +) / delete $']

Я считаю, что что-то не так с моим шаблоном в теге {% url %}, но я не понимаю, что я сделал не так. Ценю вашу помощь :)

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вы указали один и тот же путь для URL-адресов detail и delete, поэтому измените его:

 path('detail/<int:authuser_id>/<slug:slug>', views.detail, name='detail'),
 path('delete/<int:authuser_id>/<slug:slug>', views.delete, name='delete'),

А теперь в шаблоне

 <a href="{% url 'delete' todayDiary.id todayDiary.slug %}">
0 голосов
/ 27 мая 2020
views.py

def add(request):
    if request.method == 'POST':
        form = EditEntryForm(data=request.POST)
        if form.is_valid():
            form.save()
            return redirect('home')             
    else:
        form = AddEntryForm()
    return render(request, '/add.html', {'form':form})

def update(request, id):
    entry = get_object_or_404(Entry, id=id)
    if request.method == 'POST':
        form = EditEntryForm(data=request.POST, instance=entry)
        if form.is_valid():
            form.save()
            return redirect('home')             
    else:
        form = EditEntryForm(instance=entry)
    return render(request, '/edit.html', {'form':form})

def delete(request, id, slug):
    Entry.objects.filter(id=id, slug=slug).delete()
    return redirect('home')
urls.py

path('add_entry/', views.add, name='add'),
path('update/<int:id>/', views.update, name='update'),    
path('delete/<int:id>/<slug:slug>/', views.delete, name='delete'),

<a href="{% url 'detail' todayDiary.authuser_id todayDiary.slug %}">{{ entry.title }}</a>
<a href="{% url 'update' todayDiary.authuser_id %}">Update</a>
<a href="{% url 'delete' todayDiary.authuser_id todayDiary.slug %}">Delete</a>

и визуализировать форму в шаблонах как {{form.as_p}}, и неплохо было бы разделить путь для деталей и удалить, не смешивая его. Надеюсь, это поможет.

...