我的表单引用了一个带有图像字段的Django模型,该图像字段保存指向/ media /文件夹的图像URL。
默认情况下,表单会为显示“浏览...”按钮的图像生成一个摘要,如下图所示。
当我按下“浏览”按钮时,出现一个指向我的桌面的“文件上传”对话框。
我的问题:如何使该对话框指向我的/ media /文件夹?
我已经考虑过修改ClearableFileInput(FileInput)
类,但是缺乏成功所必需的技能,并且有种直觉,这可能是一种更好的方法。
非常有用。
models.py
class Product(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
reference_date = models.DateTimeField(auto_now_add=True)
product_image = models.ImageField(default='product_image/default.jpg', upload_to='product_image')
我使用“ Crippsy”表单,表单助手来生成表单。
forms.py
class ProductForm(ProductModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
Image = 'product_image'
self.fields[Image].label = 'Product Image'
self.helper.layout = Layout(
Field(Image),
)
settings.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
urls.py
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
答案 0 :(得分:1)
您的表单中需要两个字段:
ChoiceField
或ModelChoiceField
,其中包含您创建的用于显示所有选择(图像)的自定义小部件,以及用于将所选图像映射到输入字段的输入值的自定义javascript。 问题在于您的Product
模型不允许您在产品之间共享图像。因此,要么在保存产品之前必须复制图像,要么应切换为具有其自身模型的图像,并在ForeignKey
上添加一个Product
。