Есть ли способ использовать фильтр_горизонтальный в полях не m2m? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть модель, которая представляет собой MultipleChoiceField, ее необходимо заполнить атрибутами другой модели, однако мне бы хотелось, чтобы она превратилась в поле filter_horizontal -esk. Как вы можете сказать, это не отношение M2M, поэтому я не могу использовать filter_horizontal там.

Есть ли в любом случае, я могу переопределить change_form.html и обслуживать обычай HTML с этим. Я бы тоже не отказался от решения на основе JS. Я могу отправить данные (атрибуты другой модели), используя метод render_change_form.

models.py

class MyModel(models.Model):
    choice_field = models.CharField()

forms.py

class MyModelForm(forms.ModelForm):
    choices = (('adqt_homescreen_id', 'adqt_homescreen_id'),
           ('entity_name', 'entity_name'),
           ('display_name', 'display_name'),
           ('image', 'image'),
           ('category', 'category'),
           ('cat_order', 'cat_order'),
           )   
    choice_field = forms.MultipleChoiceField(choices=choices)

admin. py

class MyModelAdmin(admin.ModelAdmin):
    change_form_template = 'mychangeform.html'

    class Media:
        js = ('myjs.js', )

    def render_change_form(self, request, context, *args, **kwargs):
        field_list = list()
        for i in AdqtHomescreen._meta.get_fields():
            if hasattr(i, 'attname'):
                field_list.append(i.attname)
            elif hasattr(i, 'field_name'):
                field_list.append(i.field_name)
        extra_context = field_list
        context.update({'filterFields': field_list})
        return super(DqRulesConfigAdmin, self).render_change_form(request, context, *args, **kwargs)

mychangeform. html

{% extends "admin/change_form.html" %}
{% block after_field_sets %}{{ block.super }}
<p  id="filterFields">{{filterFields}}</p>
{% endblock %}
...