python - 将数据从表单中的条件/链式下拉框传递到视图或直接传递到 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'),
]
解决方案
推荐阅读
- c++ - 如何让while循环与数字生成器一起使用?
- c++ - 为什么我在尝试添加两个链接列表时遇到此错误?
- php - 如何修复 PHP 致命错误:调用未定义函数 is_ssl()
- javascript - Jquery .load 函数似乎将页面加载为独立页面
- google-chrome-devtools - 如何在开发人员工具中阻止特定文件中的代码?
- javascript - 如何将移动按钮控件添加到 html 画布
- python - object.__init__() 只接受一个参数(要初始化的实例)
- html - 我使用 a:hover 并且我不希望它对照片产生影响
- javascript - clearTimeout 不适用于 addEventListener
- mysql - SQL 请求获取去年超过 30 天的数据