[英]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.