在没有提交的情况下保存时,无法从django ModelForm实例获取正确的FileField.url

时间:2017-02-05 12:23:26

标签: django django-forms

我有一个模型和一个用于保存实例的模型表单:

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,那么它也是不正确的)

有没有解决方法,或者我必须做两次才能完成我想要做的事情?

0 个答案:

没有答案