繁体   English   中英

通过登录用户过滤django admin

[英]Filter django admin by logged in user

我是django的新手。 我正在创建一个简单的应用程序,我让用户输入一些数据并在以后查看。 我需要让django admin向用户显示她输入的数据而不是其他用户数据。 是否可以将其更改为多个管理页面?

谢谢

  • 在模型中存储对用户的引用。

models.py:

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

class MyModel(models.Model):
    user = models.ForeignKey(User)
    ... (your fields) ...
  • 强制将当前用户存储在该字段中(使用admin时)
  • 强制当前用户(另外)过滤这些对象的任何列表(使用admin时)
  • 防止其他用户编辑(即使他们无法看到列表中的对象,他们可以直接访问其change_form)

admin.py:

from django.contrib import admin
from models import MyModel

class FilterUserAdmin(admin.ModelAdmin): 
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        obj.save()

    def get_queryset(self, request): 
        # For Django < 1.6, override queryset instead of get_queryset
        qs = super(FilterUserAdmin, self).get_queryset(request) 
        return qs.filter(created_by=request.user)

    def has_change_permission(self, request, obj=None):
        if not obj:
            # the changelist itself
            return True
        return obj.user === request.user

class MyModelAdmin(FilterUserAdmin):
    pass   # (replace this with anything else you need)
admin.site.register(MyModel, MyModelAdmin)

如果您的MyOtherModel具有外键“user”,则只需以相同的方式从FilterUserAdmin继承MyOtherModelAdmin。

如果您希望某些超级用户能够看到任何内容,请根据您自己的要求调整queryset()和has_change_permission()(例如,如果request.user.username =='me',请不要过滤/禁止编辑)。 在这种情况下,您还应调整save_model(),以便您的编辑不会设置用户,从而“抢走”前一个用户的对象(例如,如果self.user为None(新实例),则仅设置用户)。

您必须将用户保存到每个项目,并使用该用户查询每个项目作为搜索条件。 您可能会构建一个基本模型,您的所有其他模型都将继承该模型。 为了帮助您入门,请查看管理员中的行级权限

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM