我有一个模型, 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)
答案 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, ...)