Сериализатор DRF возвращает переведенное значение поля выбора

Я использую django-modeltranslation для перевода моделей mo в DRF

поэтому я сделал все, что говорит django-modeltranslation, и он работает для полей модели

но я не могу получить переведенное значение поля выбора

from django.utils.translation import ugettext_lazy as _
class Product(models.Model):

PRODUCT_TYPES = (
    ('food', _('food')),
    ('wear', _('wear'))
)
name = models.CharField(verbose_name='Name', max_length=512, blank=True)
product_type = models.CharField('Type', choices=PRODUCT_TYPES, blank=True, null=True, max_length=16, default='food')

такие поля, как product_name и другие, переводятся django-modeltranslation и работают

но я всегда получаю food в product_type

я запускаю makemessages и compilemessages

msgid "food"
msgstr "еда"

msgid "wear"
msgstr "одежда"

вызов get_product_type_display не работал

class ProductSerializer(serializers.ModelSerializer):
    date = serializers.DateTimeField(read_only=True, format='%d.%m.%Y %H:%M')
    product_type = serializers.SerializerMethodField()

    class Meta:
        model = Product
        fields = ('phone_number', 'name', 'total_bonus', 'card_number', 'id', 'count', 'date', 'product_type',
                  'category')

    def get_product_type(self, obj):
        return obj.get_product_type_display()

person Таалай Дюшебеко&    schedule 27.05.2020    source источник
comment
Вы раньше создавали и компилировали перевод?   -  person ncopiy    schedule 27.05.2020
comment
да, я делал сообщения и собирал сообщения   -  person Таалай Дюшебеко&    schedule 27.05.2020
comment
Вам нужно вызвать get_product_type_display () в экземпляре продукта. документы   -  person mon io    schedule 27.05.2020
comment
@monio обновите мой вопрос для вас   -  person Таалай Дюшебеко&    schedule 28.05.2020


Ответы (2)


Ваш сериализатор, использующий метод объекта get_FIELDNAME_display ():

class ProductSerializer(serializers.ModelSerializer):
    date = serializers.DateTimeField(read_only=True, format='%d.%m.%Y %H:%M')
    product_type = serializers.CharField(source='get_product_type_display', read_only=True)

    class Meta:
        model = Product
        fields = ('phone_number', 'name', 'total_bonus', 'card_number', 'id', 'count', 'date', 'product_type', 'category')
person mon io    schedule 28.05.2020

Я нашел решение этой проблемы. Необходимо использовать: return _(obj.product_type)

from django.utils.translation import ugettext_lazy as _

class ProductSerializer(serializers.ModelSerializer):
    date = serializers.DateTimeField(read_only=True, format='%d.%m.%Y %H:%M')
    product_type = serializers.SerializerMethodField()

    class Meta:
        model = Product
        fields = ('phone_number', 'name', 'total_bonus', 'card_number', 'id', 'count', 'date', 'product_type',
                  'category')

    def get_product_type(self, obj):
        return _(obj.product_type)
person Таалай Дюшебеко&    schedule 28.05.2020
comment
Вы можете попробовать мое решение. - person mon io; 28.05.2020