2

是否可以設置Django Admin頁面來顯示哪個用戶在哪個組中?是否可以使用Django Admin頁面將用戶添加到組中?如果是,如何?在Django Admin中顯示羣組成員

現在,我將customers group和賣家sellers group以編程方式添加到客戶中,但我在我的管理中看不到任何信息。

這是我的註冊view

def register_customer(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     customer_registration_form = forms.CustomerRegistrationForm(request.POST) 

     if form.is_valid() and customer_registration_form.is_valid(): 
      new_user = form.save() 
      new_customer_profile = UserCustomerProfile(user=new_user) 

      new_customer_profile.save() 
      customers_group = Group.objects.get(name='Customers') 
      new_user.groups.add(customers_group) 

      return render(request, 'registration/complete.html') 
     else: 
      #handle errors 

    customer_registration_form = forms.CustomerRegistrationForm() 
    form = UserCreationForm() 
    return render(request, "registration/register.html", 
        {'form': form, 'customer_registration_form': customer_registration_form}) 

回答

2

我不知道如果這是你在找什麼,但你可以進行修改,在對的ModelAdmin集團像這樣(的admin.py你應用程序):

from django.contrib.auth.admin import GroupAdmin 
from django.contrib.auth.models import Group 
admin.site.unregister(Group) 


class UserInLine(admin.TabularInline): 
    model = Group.user_set.through 
    extra = 0 


@admin.register(Group) 
class GenericGroup(GroupAdmin): 
    inlines = [UserInLine] 

Code based on this answer

現在你可以爲你想編輯的內嵌。

我不認爲這正是你正在尋找的,但它是一個快速和骯髒的修復,完成工作。

聲明:我不知道這是否是經過批准的Django做事方式,但我相信它不會太遙遠。

+0

Django的1.8,我需要爲'through'不是集團的'屬性使用'模型= User.groups.through'。 user_set' – PaulR

3

CVi的答案只做了一些小小的調整,但對於我的用例,我真的想要另一個多選小部件來管理組中的用戶,就像管理組權限的多選一樣。

使用this answer爲靈感,我想出了這個:

from django import forms 
from django.contrib import admin 
from django.contrib.auth.admin import GroupAdmin as origGroupAdmin 
from django.contrib.auth.models import Group, User 


class GroupAdminForm(forms.ModelForm): 
    """ 
    ModelForm that adds an additional multiple select field for managing 
    the users in the group. 
    """ 
    users = forms.ModelMultipleChoiceField(
     User.objects.all(), 
     widget=admin.widgets.FilteredSelectMultiple('Users', False), 
     required=False, 
     ) 


    def __init__(self, *args, **kwargs): 
     super(GroupAdminForm, self).__init__(*args, **kwargs) 
     if self.instance.pk: 
      initial_users = self.instance.user_set.values_list('pk', flat=True) 
      self.initial['users'] = initial_users 


    def save(self, *args, **kwargs): 
     kwargs['commit'] = True 
     return super(GroupAdminForm, self).save(*args, **kwargs) 


    def save_m2m(self): 
     self.instance.user_set.clear() 
     self.instance.user_set.add(*self.cleaned_data['users']) 


class GroupAdmin(origGroupAdmin): 
    """ 
    Customized GroupAdmin class that uses the customized form to allow 
    management of users within a group. 
    """ 
    form = GroupAdminForm 


# Register the modified GroupAdmin with the admin site 
admin_site = admin.AdminSite(name='my_admin') 
admin_site.register(Group, GroupAdmin) 
+0

謝謝,這正是我所需要的。 – Gautam