我需要一个 StringRelatedField 在存在 null 值时返回 null。
这些是型号
class Category(models.Model):
name = models.CharField(max_length=100 )
class Task(models.Model):
task_name = models.CharField(max_length=140)
category = models.ForeignKey(Category, related_name='categories', null=True, blank=True, on_delete=models.PROTECT)
这是序列化器
class TaskSerializer(serializers.ModelSerializer):
category_name = serializers.StringRelatedField(source='category.name')
class Meta:
model = Task
fields = [
'task_name',
'category',
'category_name',
]
当前结果
当‘category’id不为空时,返回正确的数据
{ “任务名称”:“123”, “类别”:1、 “类别名称”:django, }
如果“category”id 为 null,则不会返回“category_name”。
{ “任务名称”:“123”, “类别”:空, }
所需结果
当 'category' id null 时仍然返回“category_name”为 null。
{ “任务名称”:“123”, “类别”:空, “类别名称”:空, }
您可以使用 CharField 来代替 StringRelatedField :
category_name = serializers.CharField(source='category.name',allow_null=True)
您可以将
allow_null=True
选项传递到 StringRelatedField
字段。所以,试试这个;
class TaskSerializer(serializers.ModelSerializer):
category_name = serializers.StringRelatedField(source="category.name", allow_null=True)
class Meta:
model = Task
fields = [
"task_name",
"category",
"category_name",
]