我环顾四周,无法找到最近的代码段或如何在Django中为模型分配group
的示例。我的项目有公司和学生我想使用装饰器只允许公司运行某些视图。我找到的最好的方法是为我的公司模型分配一个名为company的组,然后使用装饰器,如:
我已经在网站admin中创建了该组。
@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
所以我可以将班级公司的每个对象分配给一个组吗?其他解决方案也很受欢迎。
答案 0 :(得分:1)
由于贵公司背后有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)