Как я могу ограничить ImageField несколькими вариантами в Django Admin - PullRequest
0 голосов
/ 19 октября 2018

У меня есть модель с файлом, определенным как

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

Я хочу иметь возможность ограничить выбор этого значка несколькими предварительно созданными вариантами.

Я там какКак я могу показать пользователю (сотруднику) варианты в администраторе django, возможно, в раскрывающемся списке?

Это похоже на то, где я хочу поле, где вы выбираете между несколькими различными аватарами.Есть ли где-нибудь настраиваемое поле, которое может это сделать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Так же, как в качестве отправной точки, вам необходимо переопределить метод 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, вероятно, будет самым простым, илипо крайней мере, первый шаг в попытке сделать эту работу).Я также могу предположить, что вам может потребоваться более сложное представление этого поля, чтобы оно отображало миниатюру фактических изображений (см. @ ответ Чече, где он предлагает select2 - хотя это немного сложнее,так как вам нужно будет создать собственный виджет).

Все это говорит о том, что нужно просто изменить поле формы, которое использует администратор, чтобы оно предлагало поле раскрывающегося списка / выбора, а не поле для загрузки файла. Вот как вы этого добьетесь.

0 голосов
/ 19 октября 2018

Что вам нужно, это widget, чтобы сделать ваш выбор.Вы можете попробовать использовать select2 или любой другой django, адаптированный к этому, например, django-select2 .Отметьте это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...