DRF中具有实例ID的FileField

时间:2019-03-25 14:47:53

标签: django django-models django-rest-framework

我不知道为什么在发布数据时文件字段返回包含None的字符串。

像这样

  

http://example.com/room/None/1.jpg

保存时我的实例ID为空。

models.py

def room_photo_path(instance, filename):
    return 'room/{}/{}'.format(instance.id, filename)


class Room(models.Model):
    photo = models.FileField(upload_to=room_photo_path)

serializers.py

class RoomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Room
        fields = '__all__'

1 个答案:

答案 0 :(得分:2)

id已在数据库中分配,因此需要保存实例以具有ID。

upload_to函数在对象保存到数据库之前被调用,因此您无法访问ID,因为还没有ID。

如果确实需要使用ID,则可以使用信号并使用post_save信号进行更改。

Django docs: Signals