繁体   English   中英

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

[英]Django: modify model’s field before save

我有一个 model,当然,带有 ImageField 和 FileField,所以我想在每次用户创建课程时创建一个文件夹。 我想我可以在 model 被保存之前做到这一点,所以这是我的问题。

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

模型.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)

请参阅此处获取模型的字段。

要获取 object 实例的字段,那么它应该是

def save(self, *args, **kwargs):
     #### How can I alter here the ImageField parameters?
     self.Thumbnail = #do whatever you want here
     super().save(*args, **kwargs)

不可能在方法中更改字段的参数。 它只能在字段定义中完成,因为必须先保存 model

可以像普通实例变量一样使用 self 访问模型字段的实例。

例如在下面的 model class 中,

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 访问它

由于无法在创建 model 字段的参数之前对其进行修改,正如@azyCrw4282 在他的回答中所说,可以使用模型实例的名称创建一个目录并将解析 function 的文件上传到upload_to

模型.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, ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM