У меня есть модель, которая представляет собой 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 %}