models.pyfrom django.db import models
from django.contrib.auth.models import User
class Menu(models.Model):
name = models.CharField(max_length=20)
price = models.PositiveIntegerField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return f"{self.name} - {self.price}`
admin.py
from django.contrib import admin
from .models import Menu
@admin.register(Menu) ### 데코레이터를 통해 admin에 등록해줌
class MenuAdmin(admin.ModelAdmin):
readonly_fields = ('user',)
list_display = ("name", "price")
search_fields = ("name", "price")
# list_filter = ("name", "user")
# date_hierarchy = "created_at"
# ordering = ("-created_at",)
def save_model(self, request, obj, form, change): ## 작성한 menu를 로그인한 해당 user에 따라 저장
obj.user = request.user
username_id = obj.user.id
super().save_model(request, obj, form, change)
def get_queryset(self, request): ## 전체 메뉴를 보여줄 대상을 지위에 따라 지정함 (superuser의 경우 모든 user의 메뉴를 볼 수 있고, staff의 경우 본인으로 filter된 메뉴만 볼 수 있음)
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(user=request.user)
def get_list_filter(self, request): ## 필터를 보여줄 대상을 지위에 따라 지정함 (superuser의 경우 name, user 필터를 볼 수 있고 staff의 경우 name 필터만 볼 수 있음)
if request.user.is_superuser:
list_filter = ("name", "user")
else:
list_filter = ("name",)
return list_filter
superuser의 경우



staff의 경우



admin.pyfrom django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
class StaffAdminSite(admin.AdminSite):
site_header = "점주 admin"
site_title = "점주 admin"
index_title = "점주의 admin 입니다."
staff_admin_site = StaffAdminSite(name="staff_admin"`
