Django 模型对动态更改 ImageField 默认值的属性



我有以下模型:

class ImageTest(models.Model):
pic = models.ForeignKey(Pic, on_delete=models.CASCADE)
image_field = models.ImageField(upload_to='images/', default=' << HERE I WANT TO CHANGE DYNAMIC >>')

添加图像测试对象时,我从现有的 Pic 对象中选择一张图片。但是,我想使用对应于 Pic 对象的路径中的图像自动完成image_field。

例如:

  • 如果我选择 Pic 对象 #1(外键(-> 图像字段的路径为:images/pic1.jpg

  • 如果我选择图片对象 #2 ->我的路径是图像/图片2.jpg 等等。

如何在选择 Pic 对象时完成此操作,而不是在按下保存按钮时完成?

我不确定在这里设置默认值是正确的方法。我认为您可以在不迁移数据库的情况下更改默认值。 相反,我可能会覆盖ImageTest模型的save()方法,以根据pic值设置image_field

像这样的东西可能是:

class ImageTest(models.Model):
pic = models.ForeignKey(Pic, on_delete=models.CASCADE)
image_field = models.ImageField(upload_to='images/', blank=True)
def save(self, *args, **kwargs):
if self.pic:
self.image_field = self.pic.image_path # whatever the corresponding pic field is
super().save(*args, **kwargs)

您还可以实现 save(( 方法,以便仅在创建ImageTest时通过检查pk来设置image_field因为这在调用super().save()之前不会设置。

if not self.pk and self.pk:
self.image_field = self.pic.image_path # whatever the corresponding pic field is

最新更新