4

Django管理者では、ユーザーに基づいてモデルの特定の行のみを表示したいと思います。

class Article(models.Model):
    text =          models.TextField(max_length=160)
    location =        models.CharField(max_length=20)

したがって、ユーザーが管理サイトにログインし、サンフランシスコの一部である場合、ユーザーはその場所locationでのみ表示できるはずArticlesです。

4

2 に答える 2

6

あなたが欲しいのはModelAdminのクエリセットだと思います:

https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.queryset

class ArticleAdmin(admin.ModelAdmin):
    def queryset(self, request):
        qs = super(ArticleAdmin, self).queryset(request)
        if request.user.profile.location: # If the user has a location
            # change the queryset for this modeladmin
            qs = qs.filter(location=request.user.profile.location)
        return qs

これは、ユーザーがプロファイル モデルを介して場所に関連付けられていることを前提としています。

于 2012-08-10T21:41:18.400 に答える
1

を使用しhas_add_permissionカスタム(で):has_change_permissionhas_delete_permissionModelAdminadmin.py

class ArticleAdmin(admin.ModelAdmin):
    def has_add_permission(self, request):
        # Nothing really to do here, but shown just to be thorough
        return super(ArticleAdmin, self).has_add_permission(request)

    def has_change_permission(self, request, obj=None):
        if obj is not None:
            return obj.location == request.user.get_profile().location
        else:
            return super(ArticleAdmin, self).has_change_permission(request, obj=obj)

    def has_delete_permission(self, request, obj=None):
        if obj is not None:
            return obj.location == request.user.get_profile().location
        else:
            return super(ArticleAdmin, self).has_delete_permission(request, obj=obj)
admin.site.register(Article, ArticleAdmin)
于 2012-08-10T20:53:00.750 に答える