如何在django中为特定对象而不是整个类认证用户?

时间:2016-09-27 13:42:08

标签: python django

我正在制作一个应用程序来添加网站中的俱乐部。这是我的model.py文件

from django.db import models
from stdimage import StdImageField
# Create your models here.


class Club(models.Model):
    ClubName = models.CharField(max_length=200)
    ClubLogo = StdImageField(upload_to='club_logo', variations={'thumbnail':(150, 200, True)})
    ClubDetails = models.TextField()
    ClubStartDate = models.DateField()

    def __str__(self):
        return self.ClubName

class Notice(models.Model):
    NOTICE = 'NOTICE'
    UPDATES = 'UPDATES'
    EVENTS = 'EVENTS'

    NOTICE_IN_CHOICES = (
        (NOTICE, 'Notice'),
        (UPDATES, 'Updates'),
        (EVENTS, 'Events'),)

    NoticeType = models.CharField(
        max_length=20, choices=NOTICE_IN_CHOICES, default=NOTICE)
    NoticeTag = models.CharField(max_length=30)
    NoticeStartDate = models.DateField(auto_now_add=True)
    NoticeEndDate = models.DateField()
    NoticeFile = models.FileField(default='#', upload_to='notice/%Y/%m/%d')
    NoticeContent = models.TextField(default='NA')
    NoticeClub = models.ForeignKey(Club)
    def __str__(self):
        return self.NoticeTag

class Members(models.Model):
    MemeberName = models.CharField(max_length=200)
    MemberImage = StdImageField(upload_to='member_photo', variations={'thumbnail':(150, 120, True)})
    MemberEmail = models.EmailField()
    MemberClub = models.ForeignKey(Club)

    def __str__(self):
        return self.MemeberName

现在,当我通过django的内置管理面板制作用户时,我可以选择允许用户更改任何俱乐部的成员,但我想让他只能访问他所属的特定俱乐部的成员的。 正如您在picture 中所看到的,当有权访问添加通知的人时,所有俱乐部都处于下拉选项中。但不是我想要与他关联的useradmin的下拉列表中只有一个选项。

这是我的admin.py文件

from django.contrib import admin

# Register your models here.
from club.models import Club, Members, Notice

admin.site.register(Club),
admin.site.register(Members),
admin.site.register(Notice),

1 个答案:

答案 0 :(得分:1)

这是许多用户一直在努力解决的问题。

我一直在使用几个外部软件包和几个自制解决方案。但到目前为止我发现的最好的是Django Guardian它是每个对象权限的实现。这意味着您可以管理他们有权访问的用户和权限。