搜索

cover

django ImageField 上传不了文件?

染念染念

今天染念用python写了用户上传头像的功能,当测试api的时候,发现数据库存的路径有些不对劲,以及服务器也没有上传得到图片
那么,我的代码是怎么样的呢?

User.objects.filter(uid=uid).update(avatar=avatar)

而改成

user_data = User.objects.get(uid=uid)
user_data.avatar = avatar
user_data.save()

惊奇的发现

  • 会自动保存文件路径到数据库
  • 会自动保存文件到指定路径
  • 必要时会自动创建目录。

在stackoverflow找到这样的文章

也就是说使用save,如果某些模型具有重写的保存方法,则必须避免使用update,或者找到另一种方法对该重写的方法执行任何操作方法(因此你去百度的时候,就会看到django上传图片的两种写法,有些人会在视图层写with文件的写入,这是因为他们使用update

但不能完全否认update,毕竟批量更新数据挺香的,并且没有把对象加到内存中,也因此只有更新数据的作用把


What happens when you save?¶ When you save an object, Django performs
the following steps:

Emit a pre-save signal. The pre_save signal is sent, allowing any
functions listening for that signal to do something.

Preprocess the data. Each field's pre_save() method is called to
perform any automated data modification that's needed. For example,
the date/time fields override to implement auto_now_add and
auto_now.pre_save()

Prepare the data for the database. Each field's get_db_prep_save()
method is asked to provide its current value in a data type that can
be written to the database.

Most fields don't require data preparation. Simple data types, such as
integers and strings, are 'ready to write' as a Python object.
However, more complex data types often require some modification.

For example, DateField fields use a Python object to store data.
Databases don't store objects, so the field value must be converted
into an ISO-compliant date string for insertion into the
database.datetimedatetime

Insert the data into the database. The preprocessed, prepared data is
composed into an SQL statement for insertion into the database.

Emit a post-save signal. The post_save signal is sent, allowing any
functions listening for that signal to do something.

这是摘抄官方文档的说明,同样说了save会调用其他方法

查看目录

目录

来自 《django ImageField 上传不了文件?》

    评论区



    可能感兴趣