Django - Как разрешить только штатным пользователям видеть свои собственные сообщения в панели администратора

У меня есть модель под названием listings, и я хочу, чтобы пользователи из числа персонала могли просматривать, редактировать и удалять объявления только в созданной ими панели администратора. В настоящее время штатные пользователи могут просматривать редактировать и удалять все объявления

вот мой listings/admin.py

from django.contrib import admin

from .models import Listing 

class ListingAdmin(admin.ModelAdmin):

    list_display =('id','Full_Name','Is_Published','Town_Or_City','District','Region','List_Date')
    list_display_links = ('id','Full_Name')
    list_editable = ('Is_Published',)
    search_fields = ('Full_Name','Town_Or_City','District','Region',)

admin.site.register(Listing, ListingAdmin)

вот мой listings/models.py

from django.db import models
from datetime import datetime
from FuneralHomes.models import FuneralHome

class Listing(models.Model):
    index = models.ForeignKey(index, on_delete=models.DO_NOTHING,blank=True)
    Full_Name = models.CharField(max_length=200)
    First_Name = models.CharField(max_length=200)
    Last_Name = models.CharField(max_length=200)
    Nee = models.CharField(max_length=200, blank=True)
    Town_Or_City = models.CharField(max_length=200)
    District = models.CharField(max_length=200, blank=True)
    Region = models.CharField(max_length=200)
    List_Date = models.DateField(max_length=200)
    Photo = models.ImageField(upload_to='photos/%Y/%m/%d', blank=True)
    Is_Published = models.BooleanField(default=True)
    List_Date = models.DateTimeField(default=datetime.now, blank=True)
    def __str__(self):
        return self.Full_Name

Панель администратора действительно не место для таких вещей (как объясняется в первом параграфе документации Django).

Быстрый и грязный способ достижения того, что вы пытаетесь сделать, вероятно, заключается в переопределении метода delete для этой модели, чтобы проверить, создал ли ее пользователь. Чтобы только перечислить сообщения пользователя, вы можете использовать класс Manager. Наконец, для обработки редактирования необходимо переопределить метод save, чтобы проверить, существует ли уже эта модель и создал ли ее пользователь.

Вы можете переопределить функцию get_queryset и просто фильтровать объявления, относящиеся к этому пользователю, в этом случае пользователь сможет видеть только свои объявления .

class ListingAdmin(admin.ModelAdmin):

   def get_queryset (self, request):
       return Listing.objects.filter(listing_user = request.user)

Вернуться на верх