Django:从Form ImageField浏览/ media /文件夹

时间:2019-03-15 12:19:03

标签: python django django-models

我的表单引用了一个带有图像字段的Django模型,该图像字段保存​​指向/ media /文件夹的图像URL。

默认情况下,表单会为显示“浏览...”按钮的图像生成一个摘要,如下图所示。

enter image description here

当我按下“浏览”按钮时,出现一个指向我的桌面的“文件上传”对话框。

我的问题:如何使该对话框指向我的/ media /文件夹?

  • 我最终要实现的目标是能够在/ 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)

1 个答案:

答案 0 :(得分:1)

您的表单中需要两个字段:

  • 一个用于上传新图像(您现在拥有的图像)
  • ,然后从图像列表中选择一个图像。第二个可以是ChoiceFieldModelChoiceField,其中包含您创建的用于显示所有选择(图像)的自定义小部件,以及用于将所选图像映射到输入字段的输入值的自定义javascript。

问题在于您的Product模型不允许您在产品之间共享图像。因此,要么在保存产品之前必须复制图像,要么应切换为具有其自身模型的图像,并在ForeignKey上添加一个Product