
Il'ja Chichak
ilya_chch
- 2
- 0
About myself

Илья, еще раз день Вам добрый!
По поводу кода - ошибки ушли (поправил как смог), но вот код почему-то не заработал.
Может из-за того, что не может определить Usera или Group - они не проставляются почему-то...
вот мой models.py:
class Article(models.Model): number_at = models.CharField('Номер заказа', max_length=20, default='') user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='Имя Менеджера', blank=True, null=True) group_user = models.ForeignKey(Group, on_delete=models.PROTECT, verbose_name='Имя группы', null=True) created_at = models.DateTimeField('Дата создания заказа', auto_now_add=True) modified_at = models.DateTimeField('Дата внесения изменения', auto_now=True) contragent = models.CharField('Контрагент', max_length=50, blank=True, null=True) delivery_address = models.CharField('Адрес поставки', max_length=80, default='', blank=True, null=True) label = models.CharField('Наименование', max_length=50, default='', blank=True, null=True) packing = models.CharField('Фасовка', max_length=25, default='', blank=True, null=True) quantity = models.IntegerField('Количество, (кг.)', default='0', blank=False, null=True) palletizing = models.ForeignKey(Category, on_delete=models.PROTECT, verbose_name='Паллетирование', blank=True, null=True) output = models.CharField('Выгрузка', max_length=15, default='', blank=True, null=True) output_at = models.DateTimeField('Дата отгрузки', blank=True, null=True) price = models.IntegerField('Целевая цена доставки (руб.)', blank=True, null=True) is_signed = models.BooleanField('ДС подписано', default=False) delivery_type = models.CharField('Тип доставки', max_length=25, default='', blank=True, null=True) production_date = models.DateTimeField('Дата производства', blank=True, null=True) day_part = models.CharField('день или ночь', max_length=5, default='', blank=True) product_is_ready = models.BooleanField('Готовность продукта', default=False, blank=True, null=True) pack_is_ready = models.BooleanField('Готовность фасовки', default=False) packing_order = models.CharField('Порядок загрузки', max_length=15, default='', blank=True) delivery_planed_at = models.DateTimeField('Машина заказана на дату', blank=True, null=True) send_at = models.DateTimeField('Дата отправки факт', blank=True, null=True) transporter = models.CharField('Перевозчик', max_length=35, default='', blank=True) number_ts = models.CharField('Номер ТС', max_length=15, default='', blank=True) price_fact = models.IntegerField('Фактическая цена доставки (руб.)', blank=True, null=True) date_take = models.DateTimeField('Дата доставки', blank=True, null=True) def __str__(self): return str(self.number_at) class Meta: verbose_name = '=ЗАКАЗ=' verbose_name_plural = '=ЗАКАЗЫ=' permissions = ( ('can_edit_manager_group', 'Can edit manager group of columns'), ('can_edit_upakovka_group', 'Can edit upakovka group of columns'), ('can_edit_transport_group', 'Can edit transport group of columns'), )
вот мой admin.py:
class ArticleAdmin(admin.ModelAdmin): save_on_top = True list_display = ('id', 'number_at', 'user', 'group_user', 'created_at', 'modified_at', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'palletizing', 'output', 'output_at', 'price', 'is_signed', 'delivery_type', 'production_date', 'day_part', 'product_is_ready', 'pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take',) list_display_links = ('id', 'number_at', 'contragent', 'delivery_address', 'quantity') fields = ('number_at', 'user', 'group_user', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'palletizing', 'output', 'output_at', 'price', 'is_signed', 'delivery_type', 'production_date', 'day_part', 'product_is_ready', 'pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take',) readonly_fields = ('number_at', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'output', 'output_at', 'price', 'is_signed', 'delivery_type', 'production_date', 'day_part', 'product_is_ready', 'pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take',) manager_group_fields = ('number_at', 'user', 'group_user', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'palletizing', 'output', 'output_at', 'price', 'is_signed', 'delivery_type') upakovka_group_fields = ('production_date', 'day_part', 'product_is_ready') transport_group_fields = ('pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take') def get_readonly_fields(self, request, obj=None): base_readonly_fields = super().get_readonly_fields(request, obj) if request.user.has_perm('can_edit_manager_group'): self.fields = [f for f in base_readonly_fields if f in self.manager_group_fields] elif request.user.has_perm('can_edit_upakovka_group'): self.fields = [f for f in base_readonly_fields if f in self.upakovka_group_fields] elif request.user.has_perm('can_edit_transport_group'): self.fields = [f for f in base_readonly_fields if f in self.transport_group_fields] return self.fields admin.site.register(Article, ArticleAdmin)
Даже и не знаю, что не так...
Просто у Админа все для чтения и у юзеров все для чтения.
Все права по группам распределил, всех юзеров разнес тоже по группам.
Но вот не работает.
Уж извините.

Илья, доброго Вам дня!
Прошу прощения, что обращаюсь опять со своими вопросами...
Попробовал я все, что вы мне посоветовали.
Все переименовал, миграции сделал, появились пермишены как вы и говорили, но вот от разных ошибок я избавился (те которые были по недосмотру моему), но вот появилась такая ошибка и я ни как не могу найти ответов в инете по ее устранению:
UnboundLocalError: local variable 'fields' referenced before assignment
мой models.py:
class Article(models.Model): number_at = models.CharField('Номер заказа', max_length=20, default='') user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='Имя Менеджера', blank=True, null=True) group_user = models.ForeignKey(Group, on_delete=models.PROTECT, verbose_name='Имя группы', null=True) created_at = models.DateTimeField('Дата создания заказа', auto_now_add=True) modified_at = models.DateTimeField('Дата внесения изменения', auto_now=True) contragent = models.CharField('Контрагент', max_length=50) delivery_address = models.CharField('Адрес поставки', max_length=80, default='') label = models.CharField('Наименование', max_length=50, default='') packing = models.CharField('Фасовка', max_length=25, default='') quantity = models.IntegerField('Количество, (кг.)', default='0', blank=False, null=True) #palletizing = models.ForeignKey('Category', on_delete=models.PROTECT, max_length=3, blank=True, null=True) output = models.CharField('Выгрузка', max_length=15, default='') output_at = models.DateTimeField('Дата отгрузки', blank=True, null=True) price = models.IntegerField('Целевая цена доставки (руб.)', blank=True, null=True) is_signed = models.BooleanField('ДС подписано', default=False) delivery_type = models.CharField('Тип доставки', max_length=25, default='') production_date = models.DateTimeField('Дата производства', blank=True, null=True) day_part = models.CharField('день или ночь', max_length=5, default='', blank=True) product_is_ready = models.BooleanField('Готовность продукта', default=False, blank=True, null=True) pack_is_ready = models.BooleanField('Готовность фасовки', default=False) packing_order = models.CharField('Порядок загрузки', max_length=15, default='', blank=True) delivery_planed_at = models.DateTimeField('Машина заказана на дату', blank=True, null=True) send_at = models.DateTimeField('Дата отправки факт', blank=True, null=True) transporter = models.CharField('Перевозчик', max_length=35, default='', blank=True) number_ts = models.CharField('Номер ТС', max_length=15, default='', blank=True) price_fact = models.IntegerField('Фактическая цена доставки (руб.)', blank=True, null=True) date_take = models.DateTimeField('Дата доставки', blank=True, null=True) def __str__(self): return str(self.number_at) class Meta: verbose_name = '=ЗАКАЗ=' verbose_name_plural = '=ЗАКАЗЫ=' permissions = ( ('can_edit_manager_group', 'Can edit manager group of columns'), ('can_edit_upakovka_group', 'Can edit upakovka group of columns'), ('can_edit_transport_group', 'Can edit transport group of columns'), )
мой admin.py:
class ArticleAdmin(admin.ModelAdmin): save_on_top = True list_display = ('id', 'number_at', 'user', 'group_user', 'created_at', 'modified_at', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'output', 'output_at', 'price', 'is_signed', 'delivery_type', 'production_date', 'day_part', 'product_is_ready', 'pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take',) list_display_links = ('number_at', 'contragent', 'delivery_address') manager_group_fields = ('number_at', 'user', 'group_user', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'output', 'output_at', 'price', 'is_signed', 'delivery_type') upakovka_group_fields = ('production_date', 'day_part', 'product_is_ready') transport_group_fields = ('pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take') fields = ('number_at', 'user', 'group_user', 'contragent', 'delivery_address', 'label', 'packing', 'quantity', 'output', 'output_at', 'price', 'is_signed', 'delivery_type', 'production_date', 'day_part', 'product_is_ready', 'pack_is_ready', 'packing_order', 'delivery_planed_at', 'send_at', 'transporter', 'number_ts', 'price_fact', 'date_take',) readonly_fields = fields def get_readonly_fields(self, request, obj=None): base_readonly_fields = super().get_readonly_fields(request, obj) if request.user.has_perm('can_edit_manager_group'): fields = [f for f in base_readonly_fields if f in self.manager_group_fields] elif request.user.has_perm('can_edit_upakovka_group'): fields = [f for f in base_readonly_fields if f in self.upakovka_group_fields] elif request.user.has_perm('can_edit_transport_group'): fields = [f for f in base_readonly_fields if f in self.transport_group_fields] return fields admin.site.register(Article, ArticleAdmin)
Еще и Pycharm подсвечивает 'fields' в строке 'return fields' но не критично, хотя думаю, что в этом тоже есть причина.
Пишет - 'Add global statement'.
Уделите мне, балбесу немного времени. Помогите решить вопрос!
Заранее благодарен!

Илья, ЗДРАВСТВУЙТЕ!
Вы подтверждаете истину, что мир не без добрых людей и вы среди них один из первых!
ОРГОМНОЕ ВАМ СПАСИБО!
Ранее я тоже смотрел на это решение через добавление прав, но почему-то оно паказалось мне неспособным решить мою задачу. Видимо по моему малому знанию самого предмета изучения.
Спасибо ВАМ еще раз!
У меня вопрос к ВАМ по поводу метода:
- first_group_fields = ('...', '...', '...') - тут прописывать именно те столбцы которые должны быить видны той группе которая должна их редактировать?
Обязательно восспользуюсь Вашим советом по переименованию столбцов - действительно просто их пронумеровать это путано и неудобно!
Сейчас не у того компа на котором сама программа и не могу попробовать вами предложенный код в работе.
Но в понедельник надеюсь сделаю, исправлю и пришлю отзыв!
Вы мне очень помогли! Сам бы я до такого ОЧЕНЬ долго доходил!
Timeweb
Let me recommend you the excellent hosting on which EVILEG is located.
For many years, Timeweb has been proving his stability.
For projects on Django I recommend VDS hosting
View Hosting