如何在Django Admin中将ImageField限制为几种选择

时间:2018-10-19 14:14:49

标签: django django-forms django-admin

我有一个类似的模型,其文件定义为

models.ImageField(upload_to='folder_icons', null=True)

我希望能够将此图标的选择限制为一些预先创建的选择。

我有什么办法可以在下拉菜单中向用户(工作人员)显示django管理员的选择?

这类似于我想要在几个不同的化身之间进行选择的字段。某个地方有一个自定义字段可以做到这一点吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您需要一个widget来呈现您的选择。您可以尝试使用select2或任何适应这种情况的django,例如django-select2。选中this

答案 1 :(得分:0)

仅作为起点,您需要覆盖ModelAdmin.get_form()方法,这将允许您更改Django默认为image字段使用的输入字段的类型。它应该是这样的:

from django.forms import Select

class YourModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        # 1. Get the form from the parent class:
        form = super(YourModelAdmin, self).get_form(request, obj, **kwargs)
        # 2. Change the widget:
        form.base_fields['your_image_field'].widget = Select(choices=(
            ('', 'No Image'),
            ('path/to/image1.jpg', 'Image 1'),
            ('path/to/image2.jpg, 'Image 2'),
        ))

        # 3. Return the form!
        return form

您仍然需要考虑其他一些因素-例如,图像本身的路径/位置(将它们放置在settings.MEDIA_ROOT中可能是最简单的,或者至少是尝试完成此工作的第一步)。我还可以想象,您可能希望对该字段进行更复杂的演示,以便显示实际图像的缩略图(请参见@Cheche's answer where he suggests select2-但这会变得更加复杂,因为您需要制作一个自定义小部件)。

所有这些,就只是改变了管理员使用的表单字段,以便它提供一个下拉/选择字段,而不是文件上载字段,这就是您将如何实现的。