Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如何将上传到与另一个字段相关的目录_Python_Django_Database_Models - Fatal编程技术网

Python Django-如何将上传到与另一个字段相关的目录

Python Django-如何将上传到与另一个字段相关的目录,python,django,database,models,Python,Django,Database,Models,我认为代码本身就说明了问题。我有两个模型-食品和类别,我想把食品图像保存到一个与食品类别同名的文件夹中。我想我可能会覆盖save方法,但我不知道如何使它工作。有什么想法吗 from django.db import models class Category(models.Model): name = models.CharField(max_length=255) def __str__(self): return self.name class M

我认为代码本身就说明了问题。我有两个模型-食品和类别,我想把食品图像保存到一个与食品类别同名的文件夹中。我想我可能会覆盖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

Django文档说,upload\u to也可以是可调用的,比如函数。你可以看到更多的细节

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

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

食品实例是否在接收图像之前接收类别?如果是这样的话,使用@deconstructible类是很容易的。显然,food实例在收到类别之前或同时收到类别,我在ForeignKey中没有看到参数。你可以继续回答@T.Tokic