django将额外的参数传递给foreignkey字段

时间:2018-03-16 08:30:06

标签: django

我的模型如下:

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文件夹中。

有可能这样做吗?

需要一些建议:)

1 个答案:

答案 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函数并根据类型返回所需文件夹。

希望这有帮助!