【问题标题】:django pass extra parameters to foreignkey fielddjango 将额外的参数传递给外键字段
【发布时间】:2018-03-16 08:30:05
【问题描述】:

我有这样的模型:

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")

这里我有一个ForeignKey MyMedia 与头像的关系。 当我上传文件时,我希望它保存到我作为参数传递给 ForeignKeyField 或 Manytomanyfield 的特定文件夹。

假设所有头像应该保存在profile_picture字段中,所有内容都应该保存在content文件夹中。

可以这样做吗?

需要一些建议:)

【问题讨论】:

标签: django


【解决方案1】:

如果我理解了,您想要根据类型将 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 函数并根据类型返回所需的文件夹。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 2014-09-02
    • 2018-10-29
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 2018-03-21
    相关资源
    最近更新 更多