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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Django Admin中将ImageField限制为几个选项相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

谢谢

答案

作为一个起点,您需要覆盖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 - 虽然有点复杂,因为你需要制作一个自定义小部件)。

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

另一答案

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

以上是关于如何在Django Admin中将ImageField限制为几个选项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django admin 中显示布尔属性

在Django Admin中将csv数据导入数据库

如何检查 Django 中将级联删除的对象?

在Django Admin中将预填充的段塞字段设置为只读

Django Admin 中的大规模杀伤性武器?

在 Django Urls 中将 URL 作为参数传递