Обновление только определенных полей в модели 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']
Однако, если вам нужен более детальный контроль, вы можете проверить этот запрос:
Укажите 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']