get_foo_display плохо работает с DRF - PullRequest
0 голосов
/ 20 марта 2020

У меня есть

class MEMBERSHIP_STATUS:
    PENDING = 0
    DECLINED = 1
    MEMBER = 2

, а модель

class Membership(models.Model):
    MEMBERSHIP_STATUS = (
        (MEMBERSHIP_STATUS.PENDING,  _('Pending')),
        (MEMBERSHIP_STATUS.DECLINED, _('Declined')),
        (MEMBERSHIP_STATUS.MEMBER,   _('Member')),
    )

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    status = models.IntegerField(max_length=10, choices=MEMBERSHIP_STATUS, default=MEMBERSHIP_STATUS.PENDING)

    def __str__(self):
        return self.user.username

сейчас, в serializers.py, у меня есть

class MembershipSerializer(serializers.ModelSerializer):
    user = UserSerializer()
    family = FamilySerializer()

    status = serializers.SerializerMethodField()

    class Meta:
        model = Membership
        fields = '__all__'

    def get_status(self, membership):
        return membership.get_status_display()

Это всегда возвращается 0 , даже если я ожидаю, что он вернет дисплей. Решение, которое я нашел:

class MEMBERSHIP_STATUS:
    PENDING = '0'
    DECLINED = '1'
    MEMBER = '2'

Изменение целых чисел на строки, похоже, работает, но я не понимаю, почему. Любое объяснение?

...