学堂 学堂 学堂公众号手机端

djangofilefield

lewis 1年前 (2024-03-30) 阅读数 6 #技术
​FileField​​​​¶​​

class​FileField​​(upload_to=None,max_length=100,**options)​​¶​​


A file-upload field.


Note

The​​primary_key​​argument isn’t supported and will raise an error if used.

Has two optional arguments:

​FileField.​​​​upload_to​​​​¶​​


This attribute provides a way of setting the upload directory and file name, and can be set in two ways. In both cases, the value is passed to the​​Storage.save()​​method.

If you specify a string value or a​​Path​​​, it may contain​​strftime()​​formatting, which will be replaced by the date/time of the file upload (so that uploaded files don’t fill up the given directory). For example:

class MyModel(models.Model):
# file will be uploaded to MEDIA_ROOT/uploads
upload = models.FileField(upload_to='uploads/')
# or...
# file will be saved to MEDIA_ROOT/uploads/2015/01/30
upload = models.FileField(upload_to='uploads/%Y/%m/%d/')

If you are using the default​​FileSystemStorage​​​, the string value will be appended to your​​MEDIA_ROOT​​​path to form the location on the local filesystem where uploaded files will be stored. If you are using a different storage, check that storage’s documentation to see how it handles​​upload_to​​.

​upload_to​​may also be a callable, such as a function. This will be called to obtain the upload path, including the filename. This callable must accept two arguments and return a Unix-style path (with forward slashes) to be passed along to the storage system. The two arguments are:

Argument

Description

​instance​

An instance of the model where the​​FileField​​is defined. More specifically, this is the particular instance where the current file is being attached.

In most cases, this object will not have been saved to the database yet, so if it uses the default​​AutoField​​,it might not yet have a value for its primary key field.

​filename​

The filename that was originally given to the file. This may or may not be taken into account when determining the final destination path.

For example:

def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)

class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)



版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门