Я хочу иметь администратора, в котором любой оператор, который входит в панель администратора, может только просматривать свои объекты пакета, а не видеть/изменять объекты пакета, добавленные другими операторами (от пользователя).
Мои модели:
class Package(models.Model):
operator = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
destination = models.ForeignKey(Destination, on_delete=models.CASCADE)
package_name = models.CharField(max_length=255)
city = models.CharField(max_length=255)
class UserProfile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,
related_name='profile', on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
user_type = models.CharField(max_length=1, choices=USER_TYPES, default='g')
first_name = models.CharField(max_length=255, default="")
Мой пакет/admin.py:
class PackageAdmin(ModelAdmin):
icon_name = 'explore'
autocomplete_fields = ['destination']
list_display = ('image_display','package_name', 'featured', 'price', 'discounted_price',
'savings', 'fix_departure', 'rating',
'date_created',)
image_display = AdminThumbnail(image_field='thumbnail')
image_display.short_description = 'Image'
readonly_fields = ['image_display']
def get_queryset(self, request):
abc = super(PackageAdmin, self).get_queryset(request)
if request.user.is_superuser:
return abc
else:
operator = request.user.id
return abc.filter(operator=operator)
Я переопределил функцию get_queryset(self, request), но она не работает.
Мое обновление:
Я вижу здесь другую проблему. Теперь, хотя оператор не может видеть/изменять другие объекты, но может добавить объект пакета на имя другого оператора, используя адрес электронной почты из раскрывающегося списка.
Два решения будут:
- В поле оператора виден только текущий пользователь/профиль.
- Хотя письма видны, не могу добавить пакет под почтой другого оператора.