首页 > 解决方案 > 将数据从表单中的条件/链式下拉框传递到视图或直接传递到 URL

问题描述

我正在实现一项功能,允许用户通过一组条件下拉框进行查询,以通过分组查找其他用户。例如,我的下拉链来自Departments-> Teams-> Users。我已经正确设置了该部分,但我不知道如何使用最后一个 ( Users) 中的数据将其发送到我的视图或将用户重定向到 URL。如果用户是test我想将它们发送到http://example.com/user/test或者我想将它们发送到我接受user作为参数的视图。我有一个FormView、 form 和 2 个函数,它们与 Ajax 一起使用以获取有条件的下拉框。请参阅下面的代码:

视图.py

class UserQuery(FormView):
    template_name = 'people/users_form.html'
    model = People
    form_class = UsersListForm

def load_teams(request):
    department = request.GET.get('department')
    teams = Teams.objects.filter(department=department).order_by('team')
    return render(request, 'people/team_dropdown_list_options.html', {'teams': teams})


def load_users(request):
    team = request.GET.get('team')
    people = People.objects.filter(team=team).order_by('people')
    return render(request, 'people/people_dropdown_list_options.html', {'people': people})


def load_one(request):
    selected_person = request.GET.get('people')
    one = People.objects.get(id=selected_person).people
    return render(request, 'index.html', {'username': one})

load_one()我需要的数据也是如此。它有我要传递给的用户名http://example.com/user/{}——我已经有该 URL 的视图,但我需要弄清楚如何在提交表单时将它们带到那里。现在,我似乎错误地使用了 FormView,因为它想要创建一些东西,而不仅仅是查询。

表格.py

class PeopleListForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['team'].queryset = Teams.objects.none()
        self.fields['people'].queryset = People.objects.none()


        if 'department' in self.data:
            try:
                department_id = int(self.data.get('department'))
                self.fields['team'].queryset = Teams.objects.filter(department=department_id).order_by('team')
            except (ValueError, TypeError):
                pass
        elif self.instance.pk:
            self.fields['team'].queryset = self.instance.department.team_set.order_by('team')

        if 'team' in self.data:
            try:
                team_id = int(self.data.get('team'))
                self.fields['people'].queryset = Employees.objects.filter(team=team_id).order_by('people')
            except (ValueError, TypeError):
                pass
        elif self.instance.pk:
            self.fields['people'].queryset = self.instance.department.team_set.order_by('people')


        if 'people' in self.data:
            try:
                people_id = int(self.data.get('people'))
                self.fields['people'].queryset = People.objects.get(id=people_id).people
            except (ValueError, TypeError):
                pass
        elif self.instance.pk:
            self.fields['people'].queryset = self.instance.team.people

    class Meta:
        model = People
        fields = ('department', 'team', 'people')

网址.py

urlpatterns = [
    url(r'^query/$', EmployeeSurveyQuery.as_view(), name='survey-options'),
    url(r'^ajax/load_teams/$', load_teams, name='ajax-load-teams'),
    url(r'^ajax/load_users/$', load_users, name='ajax-load-users'),
    url(r'^ajax/load_one/$', load_one, name='ajax-load-one'),
    url(r'^user/(?P<username>[\w.@+-]+)/$', user_page, name='user-page'),
]

标签: pythondjangodjango-formsdjango-views

解决方案


推荐阅读