gpt4 book ai didi

django - 按登录用户过滤 django admin

转载 作者:行者123 更新时间:2023-12-02 23:16:15 24 4
gpt4 key购买 nike

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

谢谢

最佳答案

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

模型.py:

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

class MyModel(models.Model):
user = models.ForeignKey(User)
... (your fields) ...
  • 强制将当前用户存储在该字段中(使用管理员时)
  • 强制当前用户(使用管理员时)(额外)过滤这些对象的任何列表
  • 阻止其他用户进行编辑(即使他们看不到列表中的对象,但也可以直接访问其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 即可。

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

关于django - 按登录用户过滤 django admin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com