Django DRF 序列化器 StringRelatedField 不返回 null

问题描述 投票:0回答:2

我需要一个 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”, “类别”:空, “类别名称”:空, }

django-rest-framework django-serializer
2个回答
0
投票

您可以使用 CharField 来代替 StringRelatedField :

category_name = serializers.CharField(source='category.name',allow_null=True)

0
投票

您可以将

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",
        ]
© www.soinside.com 2019 - 2024. All rights reserved.