Django:在保存之前修改模型的字段

时间:2020-04-11 04:15:59

标签: python django django-models

我有一个模型, course ,其中包含一个ImageField和FileField,所以我想在用户每次创建课程时都创建一个文件夹。我想我可以在保存模型之前做到这一点,所以这是我的问题。

如何在方法中访问模型的字段?

Models.py

Class Course(models.Model):
 Thumbnail = model.ImageField(upload_to=“...”,...)

    def save(self, *args, **kwargd):
        ... #How can I alter here the ImageField parameters?
          super().save(*args, **kwargs)

3 个答案:

答案 0 :(得分:1)

有关获取模型字段的信息,请参见here

要获取对象实例的字段,则其应为

[SuppressPropertyChangedWarnings]
public class MyClassGrid: Grid
{
...
}

无法在方法中更改字段的参数。只能在字段定义中完成,因为必须先保存模型

答案 1 :(得分:1)

可以像常规实例变量一样使用self来访问models字段的实例。

例如在下面的模型类中,

class DummyModel(models.Model):
    key = models.CharField()
    value = models.TextField()

    def save(self, *args, **kwargs):
        value = self.value # self.value is a model field.
        super().save(*args, **kwargs)

就您而言,您可以使用self.Thumbnail

答案 2 :(得分:0)

由于无法在创建模型字段之前修改模型字段的参数,如@ azyCrw4282在他的回答中所说,因此可以创建一个带有模型实例名称的目录,然后将解析函数的文件上传到该目录中,以 upload_to

models.py

def upload_to(instance, filename):
    return 'user_course/{0}/{1}'.format(instance.name, filename) #instance.name will be the name of the course


class Course(models.Model):
    name       = model.CharField(...)
    thumbnail  = models.ImageField(upload_to=upload_to, ...)