我已经为我的“相册”模型创建了DeleteView,但是现在可以正常工作了。这是我的脚本:
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^albums/create/$', views.AlbumCreateView.as_view(), name='album_create'),
url(r'^albums/(?P<slug>[-\w]+)/update/$', views.AlbumUpdateView.as_view(), name='album_update'),
url(r'^albums/(?P<slug>[-\w]+)/delete/$', views.AlbumDeleteView.as_view(), name='album_delete'),
url(r'^albums/(?P<slug>[-\w]+)/$', views.AlbumDetailView.as_view(), name='album_detail'),
url(r'^albums/$', views.AlbumListView.as_view(), name='album_index'),
url(r'^songs/create/$', views.SongCreateView.as_view(), name='song_create'),
url(r'songs/$', views.SongListView.as_view(), name='song_index'),
url(r'^(?P<song_id>[0-9]+)/favorite/$', views.make_song_favorite, name='song_favorite'),
url(r'^$', views.AllAlbumListView.as_view(), name='index'),
]
views.py
from django.views.generic import ListView, DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Album
class AlbumListView(LoginRequiredMixin, ListView):
template_name = 'music/album_index.html'
context_object_name = 'all_albums'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['album_active'] = True
return context
def get_queryset(self):
queryset = Album.objects.filter(owner=self.request.user).order_by('-release_date')
return queryset
class AlbumDeleteView(DeleteView):
model = Album
template_name = 'music/album_index.html'
success_url = '/albums/'
album_index.html
{% extends "base.html" %}
{% block content %}
<div class="row">
<div class="col-md-9">
<h1>Your Albums</h1>
<a class="btn btn-primary" href="{% url 'music:album_create' %}">Add Album
<span class="oi oi-plus" title="Add New Album"></span>
</a>
<div class="card-columns" style="margin-top: 10px;">
{% for album in all_albums %}
<div class="card">
<img class="card-img-top img-fluid" src="{{ album.logo.url }}"
style="background-size: cover;">
<div class="card-body">
<h4 class="card-title">{{ album.title }}</h4>
<h6 class="card-subtitle mb-2 text-muted">{{ album.artist }}</h6>
<a class="btn btn-primary" href="{% url 'music:album_detail' album.slug %}">Look Inside</a>
<a class="btn btn-primary" href="{% url 'music:album_update' album.slug %}">
<span class="oi oi-pencil" title="Edit Album"></span>
</a>
<a class="btn btn-primary" href="{% url 'music:album_delete' album.slug %}"
data-toggle="modal" data-target="#albumDeleteConfirm">
<span class="oi oi-trash" title="Delete Album"></span>
</a>
<div class="modal fade" id="albumDeleteConfirm"
tabindex="-1" role="dialog" aria-labelledby="confirmAlbumDelete">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="confirmAlbumDelete">Remove album '{{ album.title }}'</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>
Are you sure to remove this album? Please, note that all songs
associated with this album will be also removed.
</p>
</div>
<div class="modal-footer">
**<form method="post" action="{% url 'music:album_delete' album.slug %}">{% csrf_token %}
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="submit" class="btn btn-primary" value="Confirm">Remove</button>
</form>**
</div>
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="col-md-3">
</div>
</div>
{% endblock %}
正如您在views.AlbumListView中看到的那样,我已经按发行日期对专辑进行了排序。我的问题是,当我单击“删除”按钮时,DeleteView会删除第一个专辑(即发布日期最新的专辑),而不是单击的专辑。我不知道问题出在哪里。你能帮我吗?
提前致谢!
Anid
应该是唯一的,但id="albumDeleteConfirm"
每个专辑都有一个div 。
使ID唯一(例如,通过添加slug或pk),并进行更新data-target
。
在您的中DeleteView
,我不会使用与music/album_index.html
列表视图相同的模板。docs中有一个示例删除模板。该模板将只是一个备用-如果您的模态有效,则将不会看到它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句