我有以下模型:
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