dancha
@dancha
Обожаю python

Как ограничить выбор в поле в зависимости от другого поля в django form?

есть форма:
spoiler

class OrganizationForm(forms.ModelForm):
    class Meta:
        model = Organization
        fields = ['country', 'region', 'city', 'raion', 'category', 'subcategory', 'oplata']

    def __init__(self, *args, **kwargs):
        super(OrganizationForm, self).__init__(*args, **kwargs)
        self.fields['country'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})
        self.fields['region'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})
        self.fields['city'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})
        self.fields['raion'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})
        self.fields['category'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})
        self.fields['subcategory'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})
        self.fields['oplata'].widget.attrs.update({'class': 'multiple-select', 'multiple': 'multiple'})


Как сделать что бы на странице в зависимости от выбора города менялся список выбора района и т.п.?

Если нужно вдруг. Вот отображение и шаблон.
В views.py можно (внимание не обращать на валидацию, я пока заморочился только над отображением):
spoiler

def org_exs(request):
    if request.method == "POST":
        form = forms.OrganizationForm(request.POST, request.FILES)
        if form.is_valid():
            pass
    else:
        form = forms.OrganizationForm()
    if request.POST:
        x = Organization.objects.filter(name=request.POST['name'])
    context = {
        'titlepage': 'Выгрузка организаций',
        'form': form,
    }
    return render(request, 'mainbase/exs.html', context)


На странице это соответственно выглядит так:
spoiler

<form method="post" enctype="multipart/form-data">
                                    {% csrf_token %}
                                    {{ form.as_p }}
                                    <button type="submit" class="save btn btn-success">Сохранить</button>
                                    <a href="javascript:history.go(-1)" class="save btn btn-danger">Отмена</a>
                                </form>

  • Вопрос задан
  • 374 просмотра
Пригласить эксперта
Ответы на вопрос 1
AlexNest
@AlexNest
Работаю с Python/Django
Тут куда важнее связи между моделями.
Необходимо, чтобы соответствующие таблицы были связаны внешним ключом.
Например, в таблице "район" должен быть внешний ключ к "город". В таком случае - реализовать это будет довольно просто:
ключевое поле загружаете как угодно и вешаете на него событие "изменение", вызывающее js-запрос к серверу (fetch/xmlhttprequest), который будет посылать выбранные значения и на основе полученного результата формировать пункты для select`а.
Для этого, разумеется, нужно будет создать отдельное представление, отдающее нужные данные (в виде json`а, например).
Ну и не забывайте о всяких "декоративных" моментах по типу отключения второго поля пока в первом ничего не выбрано.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы