Получение описания выбора в queryset.value_list django
У меня есть модель и в ней есть класс IntegerChoice (Gender)
Когда я получаю значение поля с помощью values_list(), я не хочу получать значение в виде числа (1 или 2), а в виде строки метки (Female или Male)
models.py:
class Policy(models.Model):
class Gender(models.IntegerChoices):
MALE = 1, _("Male")
FEMALE = 2, _("Female")
maca = models.CharField(max_length=100, db_column="Maca", null=True, blank=True)
gender = models.PositiveSmallIntegerField(
db_column="Gender",
choices=Gender.choices,
blank=True,
null=True,
)
views.py
Policy.objects.all().values_list("maca", "gender")
Please don't use .values_list(…)
[Django-doc], it erodes the "model layer", and as a result, you can indeed no longer obtain the text. I wrote an article [Django-antipatterns] that discusses the main problem(s) with this.
Вы делаете это с помощью метода .get_fieldname_display(…)
[Django-doc], поэтому здесь get_gender_display
:
my_policy.get_gender_display()
с my_policy
является Policy
объектом.
или в шаблоне, вы можете использовать:
{{ my_policy.get_gender_display }}
а в сериализаторе можно использовать:
from rest_framework import serializers
class PolicySerializer(serializers.ModelSerializer):
gender = serializers.CharField(source='get_gender_display')
class Meta:
model = Policy
fields = ('gender',)