Права для пользователей в таблице Django. Заполнение столбцов одними пользователями и просмотр и невозможность редактировать их другими и т.д
Уважаемые Специалисты! Взываю к Вашей помощи потому как очень хочу помочь другому человеку с его проблемой! Дело в том, что у меня есть проект в котором есть таблица для продаж прямо в админке django. Там же есть несколько пользователей и три группы:
- Менеджеры,
- Упаковка,
- Транспорт.
Нужно сделать так чтобы:
- каждый пользователь из группы Менеджеры мог видеть только свою заведенную строку в таблице заказа и не видеть заказы заведенные другими Менеджерами. Другими словами - если пользователь является автором заведенной строки таблицы, то он её видит, если не автор, то не видит, НО это относится только к пользователям из группы Менеджеры. Суперпользователь видит всё!
- Пользователи из группы Менеджеры могут в тех заказах (строках), что создали в таблице заполнить только несколько ячеек (столбцов)(предположим с 1-2 столбец таблицы), а остальные столбцы могут только просматривать.
- Если пользователи принадлежат к группам Упаковка и Транспорт, то они могут видеть все заказы (строки), НО редактировать в данных заказах пользователи из группы Упаковка могут только часть своих столбцов которые отведены для заполнения им (предположим с 3 по 4-й столбец таблицы). Так же и пользователи из группы Транспорт могут редактировать только те столбцы таблицы которые отведены для них (предположим что это с 5 по 6-й столбец таблицы)! Естественно admin или суперпользователь может видеть и редактировать всё!
мой models.py :
from django.db import models
from django.contrib.auth.models import User
class Articles(models.Model):
n = models.CharField('Номер заказа', max_length=20)
date = models.DateTimeField('Дата создания заказа', auto_now_add=True)
title3 = models.DateTimeField('Дата внесения изменения', auto_now=True)
title4 = models.CharField('Контрагент', max_length=50)
title5 = models.CharField('Адрес поставки', max_length=80, default='---')
title6 = models.CharField('Наименование', max_length=50, default='---')
title7 = models.CharField('Фасовка', max_length=25, default='---')
title8 = models.IntegerField('Количество, (кг.)', blank=False)
category = models.ForeignKey('Category', on_delete=models.PROTECT, null=True, verbose_name='Паллетирование')
title10 = models.CharField('Выгрузка', max_length=15, default='---')
title11 = models.DateTimeField('Дата отгрузки', blank=True, null=True)
title12 = models.IntegerField('Целевая цена доставки (руб.)', default='---', blank=True, null=True)
title13 = models.CharField('ДС подписано', max_length=3, default='---')
title14 = models.CharField('Тип доставки', max_length=25, default='---')
user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='Имя Менеджера')
title16 = models.DateTimeField('Дата производства', blank=True, null=True)
title17 = models.CharField('день или ночь', max_length=5, default='---', blank=True)
title18 = models.CharField('Готовность продукта', max_length=3, default='---')
title19 = models.CharField('Готовность фасовки', max_length=3, default='---')
title20 = models.CharField('Порядок загрузки', max_length=15, default='---', blank=True)
title21 = models.DateTimeField('Машина заказана на дату', blank=True, null=True)
title22 = models.DateTimeField('Дата отправки факт', blank=True, null=True)
title23 = models.CharField('Перевозчик', max_length=35, default='---', blank=True)
title24 = models.CharField('Номер ТС', max_length=15, default='---', blank=True)
title25 = models.IntegerField('Фактическая цена доставки (руб.)', blank=True, null=True)
title26 = models.DateTimeField('Дата доставки', blank=True, null=True)
def __str__(self):
return self.n
class Meta:
verbose_name = 'Заказ'
verbose_name_plural = 'ЗАВЕДЕННЫЕ ЗАКАЗЫ'
ordering = ['date']
class Category(models.Model):
title = models.CharField('Паллетирование', max_length=3, db_index=True)
def __str__(self):
return self.title
class Meta:
verbose_name = 'Паллетирование'
verbose_name_plural = 'Паллетирование'
ordering = ['title']
class Usera(models.Model):
user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='Имя Менеджера')
def __str__(self):
return "Пользователь: {}".format(self.user)
class Meta:
verbose_name = 'Пользователи'
verbose_name_plural = 'Добавление Пользователя'
далее мой admin.py:
from django.contrib import admin
from .models import Articles, Category, Usera
class ExcelsAdmin(admin.ModelAdmin):
save_on_top = True
list_display = ('id', 'n', 'date', 'title3', 'title4', 'title5', 'title6', 'title7',
'title8', 'category', 'title10', 'title11', 'title12', 'title13', 'title14', 'user',
'title16', 'title17', 'title18', 'title19', 'title20', 'title21',
'title22', 'title23', 'title24', 'title25', 'title26',
)
list_display_links = ('id', 'date', 'title3', 'title4', 'title5', 'title6', 'title7',
'title8', 'category', 'title10', 'title11', 'title12', 'title13', 'title14', 'user',
'title16', 'title17', 'title18', 'title19', 'title20', 'title21',
'title22', 'title23', 'title24', 'title25', 'title26'
)
search_fields = ('id', 'n', 'date', 'title3', 'title4', 'title5', 'title6', 'title7',
'title8', 'category', 'title10', 'title11', 'title12', 'title13', 'title14', 'user',
'title16', 'title17', 'title18', 'title19', 'title20', 'title21',
'title22', 'title23', 'title24', 'title25', 'title26',
)
list_editable = ('n',)
list_filter = ('title4', 'title5', 'title6', 'title7',
'category')
class CategoryAdmin(admin.ModelAdmin):
list_display = ('id', 'title'
)
list_display_links = ('id', 'title'
)
search_fields = ('title',
)
list_filter = ('title',)
class UseraAdmin(admin.ModelAdmin):
list_display = ('id', 'user'
)
admin.site.register(Articles, ExcelsAdmin)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Usera, UseraAdmin)
сейчас таблица в админке выглядит так:

БУДУ БЛАГОДАРЕН ВСЕМ КТО ПОДСКАЖЕТ И ПОМОЖЕТ! СПАСИБО!!!