Получение описания выбора в 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',)
Вернуться на верх