在 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)
我有一个应用程序模型,它在许多属性中有一个类别。该类别实际上是另一个具有类别 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)