Как получить доступ к вербальному имени модели в сериализаторе?

Я хочу получить доступ к вербальному имени модели, чтобы поместить его в качестве ключа в сериализатор. Но я не могу найти способ сделать это. Мои модели следующие:

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")

И мой сериализатор:

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')

Любые предложения будут полезны. Я также буду рад услышать другие идеи о том, как создать модель категорий. Я пробовал django-mptt, но мне нужно, чтобы товар принадлежал нескольким подкатегориям. Мог бы помочь django-polymorphic-mptt. Но я не смог найти подходящей документации.

Вы можете сделать что-то вроде следующего:

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')
Вернуться на верх