如何在Django Admin中将ImageField限制为几个选项

问题描述 投票:0回答:2

我有一个类似于文件定义的模型

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

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

我可以通过下拉列表向django管理员显示用户(工作人员)的选择吗?

这类似于我想要一个字段,您可以在几个不同的头像中进行选择。是否有可以执行此操作的自定义字段?

谢谢

django django-forms django-admin
2个回答
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 - 虽然有点复杂,因为你需要制作一个自定义小部件)。

所有这些都表示,就改变管理员使用的表单字段而言它提供了一个下拉/选择字段而不是文件上传字段而言,这就是您实现这一目标的方法。


0
投票

你需要的是一个widget来呈现你的选择。您可以尝试使用select2或任何django适应这一点,如django-select2。检查this

© www.soinside.com 2019 - 2024. All rights reserved.