簡體   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