Django admin 中group的视图怎么添加选择user呢?

clipboard.png
如图,现在是这样的,每次要往组里加入人员时,还必须去user界面加入,怎么在组的界面像图中加入权限一样的加入user呢?

阅读 4.8k
1 个回答

如果不是在admin里的话,可以自己写一个Form
前端再挑一个通用的组件 http://www.virtuosoft.eu/code...
这事基本就解决了

django amdin里的那个组件不是那么容易被第三方使用

class GroupMemberForm(forms.ModelForm):

    # users 并非是 Group 对象的属性
    # 这里使用ModelFrom对象的原因在于我们需要获得组对象
    # Field disbaled is introduced in Django 1.9
    # https://docs.djangoproject.com/en/1.9/ref/forms/fields/#disabled

    name = forms.CharField(
        label='组名', disabled=True, widget=forms.TextInput({'class': 'form-control'}))
    users = ModelMultipleChoiceField(
        label='组成员', required=False, queryset=User.objects.exclude(username='admin'),
        widget=forms.SelectMultiple(choices=User.objects.exclude(username='admin')))

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # 获得组成员
        user_ids = []
        if kwargs.get('instance'):
            group = kwargs['instance']
            for user in group.user_set.all():
                user_ids.append(user.id)
            users = User.objects.filter(id__in=user_ids)

            self.initial['users'] = users

    def save(self, commit=True):
        group = super().save(commit=False)

        # 每次提交时都已当前用户选择的组成员为准
        group.user_set.clear()
        users = self.cleaned_data['users']
        for user in users:
            user.groups.add(group)
            user.save()

        group.save()

    class Meta:
        model = Group
        exclude = ('permissions', )
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题