Django:如何在同一视图中同时包含受限访问权限和模型?

时间:2018-08-03 12:43:40

标签: python django

我有一个django音乐项目,其网站名为Add-Album。我只希望注册用户上传相册。

当我在views.py中添加了受限访问权限时,我不得不将视图从类视图更改为函数视图。但是后来我遇到了问题。没有模板,一切工作正常。模板中未显示任何表单(在班级查看时显示)。

我的问题是如何在同一视图中同时包含受限访问权限和模型?

#Views.py
# ....
# My model and fields
#    model = Album
#    fields = ['artist', 'album_title', 'genre', 'album_logo']

# before this was a class view with the model and fields
def AlbumCreate(request):
    model = Album
    fields = ['artist', 'album_title', 'genre', 'album_logo']
    if not request.user.is_authenticated:
        return redirect('{}?next={}'.format(settings.LOGIN_URL, request.path))
    return render(request, 'Music/album_form.html')


class AlbumUpdate(UpdateView):
    model = Album
    fields = ['artist', 'album_title', 'genre', 'album_logo']


class AlbumDelete(DeleteView):
    model = Album
    success_url = reverse_lazy('Music:Music')

#  ....


#models
from django.db import models
from django.urls import reverse


class Album(models.Model):
    artist = models.CharField(max_length=100)
    album_title = models.CharField(max_length=150)
    genre = models.CharField(max_length=30)
    album_logo = models.ImageField(upload_to='albumlogo/')

    def get_absolute_url(self):
        return reverse('Music:detail', kwargs={'pk': self.pk})

    def __str__(self):
        return self.album_title + ' - ' + self.artist

#urls.py

#...
url(r'album/(?P<pk>[0-9]+)/$', views.AlbumUpdate.as_view(), name='album-update'),
url(r'album/(?P<pk>[0-9]+)/delete/$', views.AlbumDelete.as_view(), name='album-delete'),
url(r'album/add/$', views.AlbumCreate, name='album-add'),
#...

1 个答案:

答案 0 :(得分:0)

查看创建视图https://docs.djangoproject.com/en/2.0/ref/class-based-views/generic-editing/#createview

,然后在其中添加所需的权限

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.contrib.auth.mixins import PermissionRequiredMixin

class AlbumCreate(PermissionRequiredMixin, CreateView):
    model = Album
    form_class = your_form_class
    template_name = "Music/album_form.html"
    permission_required = 'album.create_album'