Права для пользователей в таблице Django. Заполнение столбцов одними пользователями и просмотр и невозможность редактировать их другими и т.д

Уважаемые Специалисты! Взываю к Вашей помощи потому как очень хочу помочь другому человеку с его проблемой! Дело в том, что у меня есть проект в котором есть таблица для продаж прямо в админке django. Там же есть несколько пользователей и три группы:

  • Менеджеры,
  • Упаковка,
  • Транспорт.

Нужно сделать так чтобы:

  1. каждый пользователь из группы Менеджеры мог видеть только свою заведенную строку в таблице заказа и не видеть заказы заведенные другими Менеджерами. Другими словами - если пользователь является автором заведенной строки таблицы, то он её видит, если не автор, то не видит, НО это относится только к пользователям из группы Менеджеры. Суперпользователь видит всё!
  2. Пользователи из группы Менеджеры могут в тех заказах (строках), что создали в таблице заполнить только несколько ячеек (столбцов)(предположим с 1-2 столбец таблицы), а остальные столбцы могут только просматривать.
  3. Если пользователи принадлежат к группам Упаковка и Транспорт, то они могут видеть все заказы (строки), НО редактировать в данных заказах пользователи из группы Упаковка могут только часть своих столбцов которые отведены для заполнения им (предположим с 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)

сейчас таблица в админке выглядит так: таблица которая есть сейчас

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


Ответы (0 шт):