如何将组添加到Mod的每个实例

2024-04-26 23:44:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我环顾四周,找不到最近的代码片段或示例,说明如何将^{}分配给Django中的模型。我的项目有一些公司和学生,我想使用decorator只允许公司运行某些视图。我发现最好的方法是将我的公司模型分配给一个名为company的组,然后使用一个decorator,例如: 我已经在网站管理员中创建了组。你知道吗

@group_required('company')
def myview(request, id):
...

我的公司模式:

class Company(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, unique = True)
    name = models.CharField(max_length=100,blank= False)
    def __str__(self):
        return self.name

我能把公司的每一个对象都分配给一个小组吗?其他解决方案也值得赞赏。你知道吗


Tags: 项目django方法代码name模型self视图
1条回答
网友
1楼 · 发布于 2024-04-26 23:44:33

因为你的公司后面有一个User,所以你可以使用django内置的组管理。你知道吗

将用户添加到组:

from django.contrib.auth.models import Group
g = Group.objects.get(name='company') 
g.user_set.add(your_user)

然后您可以使用user_passes_test装饰器,只允许组company的成员访问视图

@user_passes_test(lambda u: u.groups.filter(name='company').exists())
def company_view(request):
    ...

编辑:

要将每个公司用户自动添加到公司组,可以使用signals。这将在Company模型save方法之后运行。你知道吗

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Company)
def chat_entry_created(sender, instance, created, **kwargs):
    if created:
        g = Group.objects.get(name='company') 
        g.user_set.add(instance.user)

相关问题 更多 >