我是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)
但是,由于它是可选字段,因此显示错误。
我也读过这个。但是,我不知道如何申请我的案子。我该怎么办?
答案 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