half-life
@half-life

Объясните пожалуйста причину происходящего [Django Admin @staticmethod]?

Есть три модели:
models.py

####################################
class CommonInfo(models.Model):
    name = models.CharField(max_length=100,
                            unique=True,
                            null=True,
                            verbose_name='Имя')
    def __str__(self):
        return self.name

    class Meta:
        abstract = True
####################################
class FacultyModel(CommonInfo):
    pass

    class Meta(CommonInfo.Meta):
        verbose_name_plural = 'Факультеты'
        verbose_name = 'Факультет'
        ordering = ('created_at',)
####################################
class DepartmentModel(CommonInfo):
    faculty = models.ForeignKey(FacultyModel,
                                verbose_name='Факультет')
    class Meta(CommonInfo.Meta):
        verbose_name_plural = 'Кафедры'
        verbose_name = 'Кафедра'
        ordering = ('faculty', 'created_at')
####################################
class GroupModel(CommonInfo):
    department = models.ForeignKey(DepartmentModel, 
                                   verbose_name='Кафедра')

    class Meta(CommonInfo.Meta):
        verbose_name_plural = 'Группы'
        verbose_name = 'Группа'
        ordering = ('department', 'created_at',)
####################################


И есть такой код в админке:
admin.py

@admin.register(GroupModel)
class GroupAdmin(CommonAdmin):
    list_display = ('name', 'department', 'get_faculty_name')

    def get_faculty_name(self, obj):
        return obj.department.faculty.name

    get_faculty_name.short_description = 'Факультет'
    get_faculty_name.admin_order_field = 'faculty__name'



Результат работы admin.py

Как видите добавилось поле с факультетом
d1baa32aff8d47aebd86611b29c9fc00.jpeg


Всё хорошо. Всё подходит. Но тут PyCharm подсказывает такую вещь:
Method 'get_faculty_name' may be 'static' less... (Ctrl+F1 Alt+T)
This inspection detects any methods which may safely be made static.


Я делаю метод статическим:
admin.py

@admin.register(GroupModel)
class GroupAdmin(CommonAdmin):
    list_display = ('name', 'department', 'get_faculty_name')

    @staticmethod
    def get_faculty_name(obj):
        return obj.department.faculty.name

    get_faculty_name.short_description = 'Факультет'
    get_faculty_name.admin_order_field = 'faculty__name'


И получается такое:
Такое

010532cc364b49858407f5cffb6b4463.jpeg

Собсно сам вопрос вот в чём. Нужно ли использовать этот статик метод в данной ситуации? Если да, та как вернуть полю название? Я так понял, что если юзается статик метод, то он имя подхватывает из названия метода.
  • Вопрос задан
  • 3679 просмотров
Решения вопроса 1
@pacahon
Подробностей реализации в django admin тоже не подскажу, но почему pycharm даёт такую подсказку очень легко понять - у вас в методе не используется self, а значит напрашивается сделать метод статическим.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitryVoronkov
@DmitryVoronkov
Python Developer
@admin.register(GroupModel)
class GroupAdmin(CommonAdmin):
    list_display = ('name', 'department', 'department__faculty')

Может так проще будет?
А вообще лучше не слушать pycharm и смотреть в документацию django.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы