Как я могу сериализовать None из базы данных в объект empyt?
У меня есть следующие модели:
class ContentUpload(BaseModel):
...
status = models.ForeignKey(CourseStatus, on_delete=models.CASCADE, related_name="content_status", null=True, blank = True)
class CourseStatus(BaseModel):
status_name = models.CharField(max_length=250)
slug = models.SlugField()
def save(self, *args, **kwargs):
self.slug = slugify(self.status_name)
super(CourseStatus, self).save(*args, **kwargs)
def __str__(self):
return str(self.status_name)
Следующие сериализаторы:
class CourseStatusListSerializers(serializers.ModelSerializer):
class Meta:
model = CourseStatus
fields = ('id', 'status_name', 'slug')
def get_status(self, obj):
return CourseStatusListSerializers(obj.status, context={"request": self.context['request']}).data
Когда ContentUpload.status равен None, возвращается следующее:
"status":{"status_name":"","slug":""}
Мой вопрос в том, как я могу сделать это, чтобы вернуть пустой объект? Какова ваша лучшая практика для этого?
"status":{}
1- Перепишите ваше ContentUploadSerializer
на следующее:
class ContentUploadSerializer(serializers.ModelSerializer):
status = CourseStatusListSerializers(required=False)
class Meta:
model = ContentUpload
fields = ('id', 'status',)
2- Удалите метод get_status
.
Сериализованный объект ContentUpload
с полем status
None
будет выглядеть следующим образом:
{
"id": 2,
"status": null
}
А с полем status
не None
это будет:
{
"id": 1,
"status": {
"id": 1,
"status_name": "Pending",
"slug": "pending"
}
}
Подробнее о вложенных сериализаторах вы можете прочитать на этой странице. https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects