aboka
aboka

Reputation: 55

How to access model's verbose name in a serializer?

I want to access verbose name of models to put it as a key in serializer. But I can't find a way to do it. My models are:

class ProductCategory(models.Model):
    name = models.CharField(max_length=150, unique=True)
    
    created_at = models.DateTimeField(default=timezone.now)
    modified_at = models.DateTimeField(default=timezone.now)
    
    def __str__(self):
        return self.name
    
class DeviceTypeCategory(ProductCategory):
    product_category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, 
    related_name="device_types")

    class Meta:
        verbose_name = _("Device type")
        verbose_name_plural = _("Device types")

class DeviceBrandCategory(ProductCategory):
    product_category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, 
    related_name="device_brands")

class PartTypeCategory(ProductCategory):
    product_category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, related_name="part_types")

And my serializer:

class ProductCategorySerializer(serializers.ModelSerializer):
    device_types = serializers.StringRelatedField(many=True)
    device_brands = serializers.StringRelatedField(many=True)
    part_types = serializers.StringRelatedField(many=True)

    class Meta:
        model = ProductCategory
        fields = ('name', 'device_types', 'device_brands', 'part_types')

Any suggestions would help. I would also be glad to hear out other ideas on how to create categories model. I've tried django-mptt, but I need product to belong to multiple subcategories. The django-polymorphic-mptt could have help. But I couldn't find proper documentation.

Upvotes: 1

Views: 205

Answers (1)

allexiusw
allexiusw

Reputation: 1744

You can do something like the following:

class ProductCategorySerializer(serializers.ModelSerializer):
    device_types = serializers.StringRelatedField(many=True)
    device_brands = serializers.StringRelatedField(many=True)
    part_types = serializers.StringRelatedField(many=True)
    plural_name = serializers.SerializerMethodField()

    def get_plural_name(self, obj):
        return ProductCategory._meta.verbose_name_plural

    class Meta:
        model = ProductCategory
        fields = ('name', 'device_types', 'device_brands', 'part_types', 'plural_name')

Upvotes: 1

Related Questions