Django - 如何获取与另一个字段相关的upload_to目录

Posted

技术标签:

【中文标题】Django - 如何获取与另一个字段相关的upload_to目录【英文标题】:Django - how to get upload_to directory related to another field 【发布时间】:2018-09-14 09:52:24 【问题描述】:

我认为代码不言自明。我有 2 个模型 - 食物和类别,我想将食物图像保存到与食物类别同名的文件夹中。我在想我可能会覆盖 save 方法,但我不知道如何让它工作。有什么想法吗?

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=255)
    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'Categories'

class Food(models.Model):
    name = models.CharField(max_length=255)
    category = models.ForeignKey(Category, on_delete='CASCADE')
    image = models.ImageField(upload_to=''.format(category.name))

    def __str__(self):
        return self.name

【问题讨论】:

food实例在接收到图片之前是否接收到Category?如果是这种情况,使用@deconstructible 类很容易 很明显,food实例之前或同时收到Category,我没有看到ForeignKey中的参数。你可以继续@T.Tokic的回答 【参考方案1】:

Django 文档说 upload_to 也可能是可调用的,例如函数。您可以查看更多详情here。

对于您的用例,它应该是这样的:

def food_path(instance, filename):
    return '0/1'.format(instance.category.name, filename)

class Food(models.Model):
    name = models.CharField(max_length=255)
    category = models.ForeignKey(Category, on_delete='CASCADE')
    image = models.ImageField(upload_to=food_path)

    def __str__(self):
        return self.name

【讨论】:

以上是关于Django - 如何获取与另一个字段相关的upload_to目录的主要内容,如果未能解决你的问题,请参考以下文章

Django模型南0.7.6迁移问题:表中的任何更改与另一个字段的默认值百分比

Django:如何创建一个多语言网站

如何获取主键相关字段嵌套序列化器django rest框架的所有值

Django - 从相关表中获取一个附加字段

获取一个字段的唯一记录,并与另一个字段的顺序结合

django一次清理多个字段