我有一个模型和一个用于保存实例的模型表单:
class Cat(models.Model):
image = models.ImageField(upload_to="the_image_directory")
css_file = models.FileField(upload_to="the_image_directory")
class CatForm(forms.ModelForm):
image = forms.FileField(
label=_("Cat image"),
widget=forms.FileInput()
)
class Meta:
model = Cat
exclude = ('css_file',)
css文件模板包含cat图像的样式:background-image: url("{{ cat.image.url }}")
,当通过上下文处理器运行时,它显然被图像url替换。在伪代码中(为简洁起见):
cat = form.save(commit=False)
cat.css_file = render_to_file("base.css", {"cat": cat})
cat.save()
我的问题是,我需要获取Cat
实例image
才能创建css_file
,但cat.image.url
参数不正确致电form.save(commit=False)
。它不是cat.image.url
/media/the_image_directory/some_cat.jpg
,而是/media/some_cat.jpg
。在我实际拨打upload_to
之前,似乎无法识别.save(commit=True)
。
(编辑:如果文件名重复且django需要附加随机后缀,例如cat_u7uF0aj.jpg
,那么它也是不正确的)
有没有解决方法,或者我必须做两次才能完成我想要做的事情?