'Is there another way to get value directly in drf serializer?
Let's assume we have two model
Listing
class ListingStatus(models.Model):
FULL = 0
AVALIABLE = 1
STATUS_CATEGORY = (
(FULL, _("Full")),
(AVALIABLE, _("AVAIL")),
)
listing = models.OneToOneField(Listing, on_delete=models.CASCADE)
status = models.SmallIntegerField(choices=STATUS_CATEGORY, default=AVALIABLE)
def __str__(self):
return str(self.status)
In serializer code
class ListingStatusSerializer(ReadOnlyModelSerializer):
class Meta:
model = ListingStatus
fields = ["status"]
class ListingSerializer(ReadOnlyModelSerializer):
status = ListingStatusSerializer(source="listingstatus.status")
It doesn't work. I get empty serializer
class ListingSerializer(ReadOnlyModelSerializer):
status = ListingStatusSerializer(source="listingstatus")
This works but I need to get status value like instance.status.status. it's inefficient
class ListingSerializer(ReadOnlyModelSerializer):
status = ListingStatusSerializer(source="listingstatus")
def get_status(self, instance):
return instance.listingstatus.status
I can achieve what I want with above code , but I want to make sure it's best solution?
Solution 1:[1]
use the get_field_display approach.
class ListingSerializer(ReadOnlyModelSerializer):
status = serializers.CharField(source="get_status_display")
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | jackquin |
