我的模型如下:
class Profile(models.Model, DictMixin):
user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name="profile")
display_name = models.CharField(max_length=30)
avatar = models.ForeignKey(MyMedia, models.CASCADE, related_name="avatar", type="profile")
class MyMedia(models.Model):
media = models.FileField(upload_to="some_dynamic_folder")
我在这里与MyMedia建立ForeignKey
关系。
当我上传文件时,我希望它保存到我作为参数传递给ForeignKeyField或Manytomanyfield的特定文件夹。
让我们说,所有个人资料图片都应保存在profile_picture
字段中,所有内容都应保存在content
文件夹中。
有可能这样做吗?
需要一些建议:)
答案 0 :(得分:0)
如果我理解了,你想要的是将MyMedia文件保存在一个或另一个文件夹中,具体取决于类型?如果是这样,首先您可以为MyMedia定义一个类型字段,以区分一种或另一种类型。设置后,如果将upload_to参数设置为某个功能,则可以操作该文件夹。像这样:
def some_dynamic_folder(instance, filename):
type = instance.type
if type == "profile":
return "profile_folder/{}".format(filename)
elif type == "content":
return "content_folder/{}".format(filename)
class MyMedia(models.Model):
TYPES = (
("profile", "Profile picture"),
("content", "Content picture")
)
media = models.FileField(upload_to=some_dynamic_folder)
type = models.CharField(max_length=10, choices=TYPES)
然后,每次上传文件时,它都会检查some_dynamic_folder函数并根据类型返回所需文件夹。
希望这有帮助!