Необходимо ограничить доступ для просмотра только введенных или назначенных данных в админке django
Модель пользователя
class User(models.Model):
BLOOD_GROUP_CHOICES = (
('a+','A+'),
('a-','A-'),
('b+','B+'),
('b-','B-'),
('ab+','AB+'),
('ab-','AB-'),
('o+','O+'),
('o-','O-')
)
BILLABLE_and_NON_BILLABLE_CHOICES=(
('Billable','Billable'),
('Non-Billable','Non-Billable')
)
employee_name = models.OneToOneField(Default_User,on_delete=CASCADE)
dob=models.DateField(max_length=8)
email=models.EmailField(max_length=25,default=None)
pancard=models.CharField(max_length=25,default=None)
aadhar=models.CharField(max_length=20,default=None)
personal_email_id=models.EmailField(max_length=254,default=None)
phone = PhoneNumberField()
emergency_contact_no=models.IntegerField(default=None)
emergency_contact_name=models.CharField(max_length=100,null=True)
relation=models.CharField(max_length=25,default=None)
blood_group=models.CharField(max_length=25,choices=BLOOD_GROUP_CHOICES,null=True)
designation=models.ForeignKey(Designation,on_delete=CASCADE,related_name="designation")
billable_and_non_billable=models.CharField(max_length=25,choices=BILLABLE_and_NON_BILLABLE_CHOICES,default='Billable')
joining_date=models.DateField(max_length=15,null=True)
relieving_date=models.DateField(max_length=15,null=True)
class Meta:
db_table ='User'
def __str__(self):
return str(self.id)
Модель работы
class Job(models.Model):
job_name=models.CharField(max_length=50)
client=models.ForeignKey(Client,on_delete=CASCADE,related_name='client',default=None)
#project=models.ForeignKey(Project,on_delete=CASCADE,related_name='project',default=None)
project = ChainedForeignKey(Project,chained_field="client", chained_model_field="client",show_all=False, auto_choose=True, sort=True)
user=models.ForeignKey(User,on_delete=CASCADE,related_name='user',default=None)
hours=models.TimeField(null=True)
start_date = models.DateTimeField(max_length=10)
end_date=models.DateTimeField(max_length=10)
class Meta:
db_table ='Job'
def __str__(self):
return '{} {}'.format(str(self.id), self.job_name)
admin.py
class StaffAdmin(admin.ModelAdmin):
'''def get_queryset(self, request):
qs = super().get_queryset(request)
print(f"\nrequest.user : {request.user}\n")
if request.user.is_superuser:
return qs
return qs.filter(user__id=request.user.id)'''
def get_queryset(self, request):
qs = super().get_queryset(request)
user = request.user
if user.is_superuser:
return qs
return qs.filter(user_id=request.user.id)
пользовательская модель
class Default_User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=30, unique=True)
email = models.EmailField(max_length=250, unique=True)
first_name = models.CharField(max_length=30, blank=True, null=True)
last_name = models.CharField(max_length=30, blank=True, null=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=True)
is_superuser = models.BooleanField(default=False)
date_joined = models.DateTimeField(default=timezone.now)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email', ]
Я дал привилегию для пользователей персонала просматривать, редактировать и удалять Job API, но мне нужно ограничить просмотр только их заданий, назначенных этим пользователям, и редактировать и удалять задания, которые пользователь добавил. Но в приведенном выше коде я не смог этого сделать, так как он не показывает задания, которые назначены суперпользователем конкретному пользователю. Пожалуйста, помогите решить эту проблему, так как я новичок в django и застрял на этом методе.
Если вы используете пользовательский класс ModelAdmin, вам необходимо зарегистрировать его в модели, к которой вы хотите его применить. Класс ModelAdmin - это представление модели в интерфейсе администратора.
from django.contrib import admin
from myapp.models import Job
class JobModelAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(user=request.user)
admin.site.register(Job, JobModelAdmin)