如何在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限制为几个选项的主要内容,如果未能解决你的问题,请参考以下文章