我环顾四周,找不到最近的片段或如何分配 group
的示例到 Django 中的模型。我的项目有公司和学生我想使用装饰器只允许公司运行某些 View 。我发现最好的方法是为我的公司模型分配一个名为 company 的组,然后使用如下装饰器:
我已经在网站管理员中创建了群组。
@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
那么我可以将 Company 类的每个对象分配给一个组吗?其他解决方案也很受欢迎。
最佳答案
由于您的公司背后有一个用户
,您可以使用django 的内置组管理。
将用户添加到组:
from django.contrib.auth.models import Group
g = Group.objects.get(name='company')
g.user_set.add(your_user)
然后您可以使用 user_passes_test
装饰器只允许组 company
的成员访问 View
@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)
关于python - 如何将组添加到模型的每个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36068074/