Как получить имена полей, которые были выбраны с помощью метода "only()"?

Например, у меня есть простая модель:

class Person(models.Model):
    id = models.BigAutoField("id", primary_key=True)
    first_name = models.CharField(max_length=150)
    surname = models.CharField(max_length=150)
    age = models.IntegerField()

Я использую метод только для выбора нужных мне полей:

queryset = Person.objects.all().only("first_name", "age")

Как получить имена полей("фамилия_имя", "возраст"), которые были выбраны?

Я попробовал следующее:
queryset.query.get_loaded_field_names()

Но я получил эту ошибку:
AttributeError:'Query' object has no attribute 'get_loaded_field_names'

Вы можете использовать метод .get_select_mask() объекта .query:

queryset.query.get_select_mask()

Это вернет словарь, где ключами являются объекты полей, так что вы можете получить название полей с помощью:

[f.name for f in queryset.query.get_select_mask()]

This is however not a good idea from a software engineering perspective: the entire idea is that .only(…) [Django-doc] and .defer(…) [Django-doc] are used in a transparent manner.

Вернуться на верх