Django模型ImageField upload_to不会将函数作为argumen

2024-04-20 05:02:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试重命名上传的图片。我好像不能让它工作。在

class Article(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to=photo_file_name, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=255)
    description = models.TextField()
    url = models.CharField(max_length=255, blank=True, null=True)

    def __str__(self):
        return self.title

    def photo_file_name(self, filename):
        extension = filename.split('.')[-1]
        filename = 'cover_photo_{}.{}'.format(self.id, extension)
        return os.path.join('articles/media/articles/photos/coverphotos/', filename)

没有一个答案能帮助我。我得到一个名称错误:名称'照片'文件'没有定义。任何帮助都将不胜感激。谢谢您!在


Tags: nameselftruereturntitlemodelsdeffilename
2条回答

hi函数不应是类的一部分

def photo_file_name(self, filename):
    extension = filename.split('.')[-1]
    filename = 'cover_photo_{}.{}'.format(self.id, extension)
    return os.path.join('articles/media/articles/photos/coverphotos/', filename)


class Article(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE)
   photo = models.ImageField(upload_to=photo_file_name, blank=True, null=True)
   created_at = models.DateTimeField(auto_now_add=True)
   title = models.CharField(max_length=255)
   description = models.TextField()
   url = models.CharField(max_length=255, blank=True, null=True)

   def __str__(self):
      return self.title

在你的模型里加上这个

import os
from uuid import uuid4
from django.utils.deconstruct import deconstructible


@deconstructible
class PathAndRename(object):
   def __init__(self, sub_path):
       self.path = sub_path

   def __call__(self, instance, filename):
       # add extension as per your requirement, I am using .png
       ext = "png"
       # set filename as random string
       filename = '{}.{}'.format(uuid4().hex, ext)
       # return the whole path to the file
       return os.path.join(self.path, filename)

class Article(models.Model):
    photo = models.ImageField(upload_to=PathAndRename('images/'), blank=True, null=True)

清除照片文件名功能。可以将路径和名称添加到所有模型中。在

相关问题 更多 >