我有一个类似的模型,其文件定义为
models.ImageField(upload_to='folder_icons', null=True)
我希望能够将此图标的选择限制为一些预先创建的选择。
我有什么办法可以在下拉菜单中向用户(工作人员)显示django管理员的选择?
这类似于我想要在几个不同的化身之间进行选择的字段。某个地方有一个自定义字段可以做到这一点吗?
谢谢
答案 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-但这会变得更加复杂,因为您需要制作一个自定义小部件)。
所有这些,就只是改变了管理员使用的表单字段,以便它提供一个下拉/选择字段,而不是文件上载字段,这就是您将如何实现的。