Как получить имена полей, которые были выбраны с помощью метода "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.