'Django - How to only allow staff users to see their own posts in admin panel

I have a model called listings and I want staff users to only be able to view, edit, delete listings in the admin panel that they created. Currently staff users can view edit and delete all of the listings

here is my 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)

here is my 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


Solution 1:[1]

The admin panel really isn't the place for things like this (as explained in the first paragraph of the Django documentation).

A quick a dirty way of accomplishing what you're trying to do is probably overriding the delete method for this model to check if the user created it. For only listing the user's posts you could utilize the Manager class. Finally, to handle editing, you would have to override the save method to see if it already exists and if the user created it.

Solution 2:[2]

you can override get_queryset function and just filter listings related to that user , in this case user can only see his listings .

class ListingAdmin(admin.ModelAdmin):

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Lzak
Solution 2 Alireza Alami