Django可定制的文件路径基于用户(配置文件)名称

x6492ojm  于 2023-04-22  发布在  Go
关注(0)|答案(1)|浏览(117)

谢谢你的帮助。我正在用Django创建一个个人网站,我来自Drupal背景。我刚刚开始学习框架。
我正在寻找帮助...一个关于如何开始创建一个可自定义的文件(图像,视频)路径的建议包或方向关闭一个用户(配置文件)名称。所以,一个新的目录将被创建,当用户(配置文件)被创建,该用户的媒体存储在他们的目录中。然后它也会被分解成,如果它是一个图像或视频与自己的目录。
在下面的这些文件中,到目前为止,我已经这样设置了。
settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'``

用户/models.py

`class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    def __str__(self):
        return f'{self.user.username} Profile'`

谢谢。
我是Django框架的新手,希望有一些方向能给我指出正确的方向。

ddrv8njm

ddrv8njm1#

基于:Django dynamic FileField upload_to

import os

from django.db import models
from django.contrib.auth.models import User

def profile_upload_path(obj, filename):
    return os.path.join(obj.user.username, filename)

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to=profile_upload_path)

    def __str__(self):
        return f'{self.user.username} Profile'

我很惊讶这是多么好的工作!我期待着一堆自定义的东西和手动创建的dirs..它排序只是做这一切!
如果你想总是让他们有相同的名字,这也可以工作:

def profile_upload_path(obj, filename):
    extension = filename[filename.rfind('.'):]
    return os.path.join(obj.user.username, f'profile{extension}')

我只是弹出了扩展名,这样它就不会在最后出现格式错误..所以最终结果将是MEDIA_ROOT/{username}/profile{ext},这可能对组织有好处

相关问题