Django Rest框架i18n在GET上工作,但不';t在邮局工作

Django Rest框架i18n在GET上工作,但不';t在邮局工作,django,python-2.7,internationalization,django-rest-framework,Django,Python 2.7,Internationalization,Django Rest Framework,我的项目中有API,需要使响应中的一些数据可翻译 所以我有一个模型: class Ticket(models.Model): NEW = 'new' CONFIRMED = 'confirmed' USED = 'used' CANCELED = 'canceled' STATUS_CHOICES = ( (NEW, _('New')), (CONFIRMED, _('Confirmed')), (USED

我的项目中有API,需要使响应中的一些数据可翻译

所以我有一个模型:

class Ticket(models.Model):
    NEW = 'new'
    CONFIRMED = 'confirmed'
    USED = 'used'
    CANCELED = 'canceled'

    STATUS_CHOICES = (
        (NEW, _('New')),
        (CONFIRMED, _('Confirmed')),
        (USED, _('Used')),
        (CANCELED, _('Canceled')),
    )

    service_subscription = models.ForeignKey(ServiceSubscription)
    price = models.DecimalField(max_digits=11, decimal_places=2, null=True, blank=True)
    ticket_order = models.ForeignKey(TicketOrder)
    begin_stamp = models.DateTimeField()
    status = models.CharField(max_length=15, choices=STATUS_CHOICES, default=NEW)
    code = models.CharField(max_length=36, null=True, blank=True)
    created = models.DateTimeField(default=timezone.now)
    changed = models.DateTimeField(auto_now=timezone.now)
    processed_by = models.ForeignKey(User, on_delete=models.PROTECT, null=True, blank=True)
该情况下的序列化程序:

class TicketViewSetSerializer(serializers.ModelSerializer):
    status = serializers.SerializerMethodField()

    class Meta:
        model = Ticket
        fields = ('begin_stamp', 'status', 'changed')

    def get_status(self, obj):
        return obj.get_status_display()
我有一个视图集,我称之为:

class TicketViewSet(viewsets.ModelViewSet):
    queryset = Ticket.objects.all()
    serializer_class = TicketViewSetSerializer
    permission_classes = (IsAuthenticated, IsCorpMember)

    @list_route(methods=['get', 'post'], url_path='check/(?P<event_schedule_pk>[0-9]+)')
    def check_ticket(self, request, event_schedule_pk, *args, **kwargs):

        event_schedule = get_object_or_404(EventSchedule, pk=event_schedule_pk)

        data = {}
        status = 200

        if request.method == "POST":
            # get ticket code
            code = request.data.get('code')
            try:
                ticket = self.queryset.select_for_update().filter(
                    code=code, begin_stamp=event_schedule.start, service_subscription__data__jcontains={'id': event_schedule.event_id})[0]
            except IndexError:
                return HttpResponseNotFound(ugettext('Code invalid or ticket is not for this event'))

            if ticket.status == 'confirmed':
                ticket.status = 'used'
                ticket.processed_by = request.user
                ticket.save()

            else:
                status_msg = {
                    'new': ugettext('Need to be paid firstly'),
                    'used': ugettext(u'Already used'),
                    'canceled': ugettext('Ticket is canceled')
                }
                data['message'] = status_msg.get(ticket.status)
                status = 400

            ticket_serializer = TicketViewSetSerializer(ticket)
            data['ticket'] = ticket_serializer.data

        event_schedule_serializer = EventScheduleCorpSerializer(event_schedule)
        data['event_schedule'] = event_schedule_serializer.data

        return Response(data, status=status)
我需要根据标题中的用户语言翻译票证状态。当我在GET(/ticket/)上调用这个viewset时,我会转换状态,但在POST上调用时,我会以默认语言获取数据。 (我已经从django.middleware.locale导入了中间件类中的LocaleMiddleware)


所以我真的不知道我做错了什么。

答案很简单。我错过了一个重要的场景。我只需要将我的locales文件夹添加到

LOCALE_PATHS = (
    ---------some existing folders-------------,
    os.path.join(BASE_DIR, 'ui/Api/locale'), # my folder I missed
)

现在一切正常。

答案很简单。我错过了一个重要的场景。我只需要将我的locales文件夹添加到

LOCALE_PATHS = (
    ---------some existing folders-------------,
    os.path.join(BASE_DIR, 'ui/Api/locale'), # my folder I missed
)
现在一切都很好