根据条件动态命名上传文件

时间:2018-07-20 07:15:56

标签: python django django-forms

我正在Django应用程序中上传图像。这是我的模型。py。

def file_rename(instance, filename):
    ext = filename.split('.')[-1]
    count = Count.objects.get(pk=1)
    ZSN = "ZT-WJ-" + str(count.jeans_count + 1)
    filename = '{}.{}'.format(ZSN, ext)
    return os.path.join('images', filename)

class Images(models.Model):
    design_id = models.CharField(max_length=128)
    file = models.ImageField(upload_to=file_rename)
    cost_price = models.FloatField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=False)

这里所有上传的图像都以'ZT-WJ-' + count_of_image的名称存储。但是我不希望'ZT-WJ-'是静态的。我希望它基于图像所属的类别。 例如,我可以像这样在file_rename方法中编写一些代码吗?

if Image.category == "random":
    #
else:
    #

如何在不干扰前端且不使用JavaScript的情况下做到这一点?

1 个答案:

答案 0 :(得分:1)

由于在instance方法中具有file_rename参数,因此可以使用它来查找类别。 因此,您的file_rename方法可能类似于:

def file_rename(instance, filename):
    if instance.category.name == 'random':
        prefix = '1'
    else:
        prefix = '2'
    ext = filename.split('.')[-1]
    count = Count.objects.get(pk=1)
    ZSN = prefix + str(count.jeans_count + 1)
    filename = '{}.{}'.format(ZSN, ext)
    return os.path.join('images', filename)