为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MYYA 2022-10-06 15:44:01
我有一个模型course,ImageField所以FileField我想在每次用户创建课程时创建一个文件夹。我想我可以在保存模型之前做到这一点,所以这是我的问题。如何在方法中访问模型的字段?模型.pyClass 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 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

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


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


def save(self, *args, **kwargs):

     #### How can I alter here the ImageField parameters?

     self.Thumbnail = #do whatever you want here

     super().save(*args, **kwargs)

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


查看完整回答
反对 回复 2022-10-06
?
皈依舞

TA贡献1851条经验 获得超3个赞

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


例如在下面的模型类中,


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


查看完整回答
反对 回复 2022-10-06
?
开满天机

TA贡献1786条经验 获得超13个赞

由于在创建模型字段之前无法修改模型字段的参数,正如@azyCrw4282 在他的回答中所说,可以使用模型实例的名称创建一个目录并将解析函数的文件上传到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, ...)


查看完整回答
反对 回复 2022-10-06
  • 3 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号