Обновление только определенных полей в модели models.Model Django

У меня есть APP для оценки руководителей персоналом на Django.

У меня есть модель в models.py в моем приложении Django :

class SuperviserModel(models.Model):
    name = models.TextField(db_collation='C')  
    family = models.TextField(db_collation='C')  
    score = models.FloatField(db_column='score ', blank=True, null=True)  # 
    def __str__(self)-> str:
        return f' -  {self.family}  - {self.name}'
    class Meta:
        managed = False
        db_table = 'personnel'

И в admin.py:

@admin.register(SuperviserModel)
class MySuperviserModelAdmin(admin.ModelAdmin):
    list_display = ['name','family','score']
    sortable_by = ['name','family']
    search_fields=['name', 'family']

Я хочу, чтобы при редактировании персонала superviser пользователь только обновлял поле оценки, а имя и фамилию обновлять не мог.

Как мне быть?

Вы можете использовать атрибут readonly_fields в вашей модели администратора.

Из документации (https://docs.djangoproject.com/en/5.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields):

По умолчанию админка показывает все поля как редактируемые. Любые поля в этой опции (которые должны быть списком или кортежем) будут отображать свои данные как есть и не будут редактироваться;

Поэтому вам следует изменить свой класс на:

@admin.register(SuperviserModel)
class MySuperviserModelAdmin(admin.ModelAdmin):
    list_display = ['name','family','score']
    sortable_by = ['name','family']
    search_fields = ['name', 'family'],
    readonly_fields = ['name', 'family']

Однако, если вам нужен более детальный контроль, вы можете проверить этот запрос:

Разрешение уровня поля Django

Укажите score только .fields [Django-doc]:

@admin.register(SuperviserModel)
class MySuperviserModelAdmin(admin.ModelAdmin):
    list_display = ['name', 'family', 'score']
    sortable_by = ['name', 'family']
    search_fields = ['name', 'family']
    fields = ['score']
Вернуться на верх