Замена для django `render_options` - PullRequest
       25

Замена для django `render_options`

0 голосов
/ 05 сентября 2018

Итак, я реализую этот ответ: Раскрывающиеся меню "Страна / Штат / Город" внутри встроенного администратора Django , но часть кода def render необходимо переделать .... Мне удалось повторить это, но я изо всех сил пытаюсь найти замену (или правильный код) для метода self.render_options (который устарел 1.11) класса Widget.

Я на Джанго 2.1. Что я должен изменить? Вот мой код:

class StateChoiceWidget(widgets.Select):
    def render(self, name, value, attrs=None, renderer=None):
        self.choices = [(u"", u"---------")]
        if value is None:
            value = ''
            model_obj = self.form_instance.instance
            if model_obj and model_obj.country:
                for m in model_obj.country.state_set.all():
                    self.choices.append((m.id, smart_text(m)))
        else: 
            obj = State.objects.get(id=value)
            for m in State.objects.filter(country=obj.country):
                self.choices.append((m.id, smart_text(m)))

        final_attrs = self.build_attrs(attrs)
        output = ['<select%s>' % flatatt(final_attrs)]
        for option in self.choices:
            output.append('<option value="%s">%s</option>' % (option[0], option[1]))
        output.append('</select>')
        return mark_safe(''.join(output))

1 Ответ

0 голосов
/ 05 сентября 2018

Итак, я разобрался с ответом. Разместим здесь, если кто-то столкнется с той же проблемой.

class StateChoiceWidget(widgets.Select):
    def render(self, name, value, attrs=None, renderer=None):
        self.choices = [(u"", u"---------")]
        if value is None or value == '':
            value = ''
            model_obj = self.form_instance.instance
            if model_obj and model_obj.country:
                for m in model_obj.country.state_set.all():
                    self.choices.append((m.id, smart_text(m)))
        else: 
            obj = State.objects.get(id=value)
            for m in State.objects.filter(country=obj.country):
                self.choices.append((m.id, smart_text(m)))

        final_attrs = self.build_attrs(attrs) 

        s = widgets.Select(choices=self.choices)
        select_html = s.render(name=name,value=value,attrs=attrs)

        return mark_safe(''.join(select_html))
...