在 Django-Rest-Framework 中与 PrimaryKeyRelatedField 关联时获取列而不是对象

Getting a column instead of an object when relating with PrimaryKeyRelatedField in Django-Rest-Framework

我有一个应用程序模型,它在许多属性中有一个类别。该类别实际上是另一个具有类别 ID、名称等的模型的键。

class Application(models.Model):
    title = models.CharField(max_length=50)
    vendor = models.CharField(max_length=50, default="Unknown", null=False)
    .
    .
    .
    category = models.ForeignKey('ApplicationCategory', related_name='applications', null=False, default=1, on_delete=models.SET_DEFAULT)


class ApplicationCategory(models.Model):
    name = models.CharField(max_length=20, null=False)
    description = models.CharField(max_length=200, null=False)

然后,在 Django REST 序列化程序方面,我有应用程序的序列化程序:

class SoftwareSerializer(serializers.ModelSerializer):
    category = serializers.PrimaryKeyRelatedField(queryset=ApplicationCategory.objects.all())
    
    class Meta:
        model = Application
        fields = ['id', 'title', ... 'category']

它正在生成预期的 API 视图,带有类别下拉列表,但将它们显示为 ApplicationCategory 对象并且没有给我它们的名称。

API showing Category dropdown with objects instead of names

为了可用性,有没有办法访问这些对象的属性以在下拉列表中显示名称?

我也曾尝试创建一个 CategorySerializer 对象 (class CategorySerializer(serializers.ModelSerializer)),然后将其用作 category = CategorySerializer(many=False) 但我没有使用下拉菜单,而是为类别的属性打开了文本字段。

我是否在尝试做一些预计不会奏效的事情?

尝试在 str 方法中为您的 ApplicationCategory class:

定义所需的文本
class ApplicationCategory(models.Model):
    name = models.CharField(max_length=20, null=False)
    description = models.CharField(max_length=200, null=False)
    #example
    def __str__(self):
        return '%s: %s' % (self.name , self.description)