首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django auth: Group Leader

Django auth: Group Leader
EN

Stack Overflow用户
提问于 2012-01-04 20:01:11
回答 2查看 306关注 0票数 0

我的应用程序有数百个用户和大约10到20个组。现在客户想要给组长特殊的特权。

你将如何做到这一点(以可重用的方式)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-09 22:40:07

代码语言:javascript
复制
#------------------------------------------
# models.py of fooapp

from django.db import models
from django.contrib.auth.models import User, Group

class GroupLeader(models.Model):
    user=models.OneToOneField(User, primary_key=True)
    groups=models.ManyToManyField(Group, related_name='leaders')
    class Meta:
        verbose_name_plural=u'Group Leaders'

下一个片段使组领导在django admin中可用:

代码语言:javascript
复制
#-----------------------------------------
# admin.py of fooapp
# See http://stackoverflow.com/questions/2216974/django-modelform-for-many-to-many-fields
from django.contrib.auth.admin import GroupAdmin
from fooapp.models import GroupLeader

class MyGroupForm(forms.ModelForm):
    class Meta:
        model=Group
    leaders = forms.ModelMultipleChoiceField(queryset=User.objects.all())

    def __init__(self, *args, **kwargs):
        if 'instance' in kwargs:
            # We get the 'initial' keyword argument or initialize it
            # as a dict if it didn't exist.                
            initial = kwargs.setdefault('initial', {})
            # The widget for a ModelMultipleChoiceField expects
            # a list of primary key for the selected data.
            initial['leaders'] = [t.pk for t in kwargs['instance'].leaders.all()]

        forms.ModelForm.__init__(self, *args, **kwargs)
        self.fields['leaders'].widget.attrs['size']=10

    def save(self, commit=True):
        instance = forms.ModelForm.save(self, False)

        # Prepare a 'save_m2m' method for the form,
        old_save_m2m = self.save_m2m
        def save_m2m():
           old_save_m2m()
           instance.leaders.clear()
           for leader_user in self.cleaned_data['leaders']:
               leader_obj, created = GroupLeader.objects.get_or_create(pk=leader_user.pk) # User object to GroupLeader object
               instance.leaders.add(leader_obj)
        self.save_m2m = save_m2m

        # Do we need to save all changes now?
        if commit:
            instance.save()
            self.save_m2m()


        return instance

class MyGroupAdmin(GroupAdmin):
    form=MyGroupForm
admin.site.unregister(Group)
admin.site.register(Group, MyGroupAdmin)
票数 0
EN

Stack Overflow用户

发布于 2012-01-04 20:06:08

您可以创建一个扩展group类的新模型,并将其添加到user (引导者)中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8726542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档