Django 多对多关系、ImageField 和 upload_to

2 投票
2 回答
2453 浏览
提问于 2025-04-15 21:39

我有下面这两个模型:

class EntryImage(models.Model):  
    image = models.ImageField(upload_to="entries")

class Entry(models.Model):  
    code = models.CharField(max_length=70, unique=True)  
    images = models.ManyToManyField(EntryImage, null=True, blank=True)

如你所见,Entry可以有0张或多张图片。我的问题是:有没有办法设计这样的结构,并根据Entry的代码动态改变上传的路径?

2 个回答

0

你可以把 upload_to 设置成一个可以调用的函数,这样它在被使用时会接收到它所关联的模型实例。不过,这个模型实例可能还没有被保存,这样的话你可能就无法查询到 Entry 代码了。

1

其实不需要跑题太远,你可以创建一个中间表叫做 EntryImageDir,里面存放目录名称。然后,你可以通过外键把你的 EntryImages 连接到这个表上。你可以在创建 Entry 的时候,或者在上传文件的时候,来创建这个 EntryImageDir。

关于带自定义字段的多对多关系的文档可以在这里找到: http://www.djangoproject.com/documentation/models/m2m_intermediary/

撰写回答