如何在管理页面中修改组创建表单

时间:2013-11-03 03:43:34

标签: django permissions django-admin

我正在开发一个具有不同用户组的项目,并且用户组在网站上拥有不同的权限。现在我希望能够在django管理组创建页面上创建这些用户组。我需要组创建页面以获得更多复选框或多对多表单,例如我可以为组分配的不同区域和功能。

我尝试过类似的东西,但它不起作用:

class GroupPermission(GroupAdmin):
    group = models.CharField(max_length=100)
    if not hasattr(Group, 'locations'):
        field = models.ForeignKey(Group,blank=True,null=True)
        field.contribute_to_class(Group, 'locations')
    annotations = models.TextField()
    show_all_annotations = models.BooleanField(default=False)
    location_group = models.CharField(max_length=100)
    show_all_locations = models.BooleanField(default=False)


class Meta:
    permissions = (
        ("show_us_map", "Allow user to view the US Map."),
        ("show_world_map", "Allow user to view the World Map."),
        ("show_europe_map", "Allow user to view the Europe Map."),
        ("allow_download_data", "Allow user to download data."),
    )
    def __unicode__(self):
    return self.group

admin.site.unregister(Group)
admin.site.register(Group, GroupPermission) 

有没有人有任何想法?或者有没有可以做到这一点的插件?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

from django.contrib.auth.admin import GroupAdmin
from django.contrib.auth.models import Group

Membership = Group.user_set.related.through

class MembershipInline(admin.TabularInline):
    model = Membership
    extra = 1

GroupAdmin.inlines = list(GroupAdmin.inlines) + [MembershipInline]

更简洁的方法是创建自己的GroupAdmin,并使用admin.site.unregisteradmin.site.register,而不是如上所述进行猴子修补。

另外,请注意,与Django提供的漂亮的多对多小部件相比,界面相当粗糙,但它可以工作。

答案 1 :(得分:0)

您将模型字段添加到ModelAdmin,这将无效。你应该做的是:

  • 将模型字段添加到某个地方的Model
  • 创建一个ModelForm,其中包含您需要的所有字段,并自定义here in the docsin this example
  • 所述的save方法
  • ModelAdmin中使用此表单,如here in the docs
  • 所示