Django序列化可选字段

时间:2016-03-06 09:36:20

标签: python django

我是Django的初学者。目前,我可以像这样序列化。

Serializer(serializers.ModelSerializer):

    sound_url = serializers.SerializerMethodField('get_sound_url')

    class Meta:
        model = Dialogue
        fields = ('id','english', 'sound_url') 

    def get_sound_url(self, dialogue):
        request = self.context.get('request')
        sound_url = dialogue.sound.url
        return request.build_absolute_uri(sound_url)

模型

class Dialogue(models.Model):
    owner = models.ForeignKey(User)
    english = models.TextField(max_length=400000)
    sound = models.FileField(upload_to='dialogues',blank=True, null=True)
    updated = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '%s' % (self.english)

但是,由于它是可选字段,因此显示错误。

我也读过这个。但是,我不知道如何申请我的案子。我该怎么办?

Django REST Framework - Serializing optional fields

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要考虑dialogue.sound None的可能性,请尝试以下方法:

def get_sound_url(self, dialogue):
    if not dialogue.sound:
        return ''
    request = self.context.get('request')
    return request.build_absolute_uri(dialogue.sound.url)

答案 1 :(得分:0)

在尝试访问get_sound_url字段之前,在[{1}}方法中sound None创建一个支票。

sound.url

然后,Django REST框架序列化程序可以有一个字段allow_null。尝试将其设置为def get_sound_url(self, dialogue): if not dialogue.sound: return None request = self.context.get('request') sound_url = dialogue.sound.url return request.build_absolute_uri(sound_url) ,然后检查:

true