i'm using django filter queryset want,here code:
students = student.objects.filter( sales=current_user, nickname = form_data['nickname'], mobile = form_data['mobile'], gender = form_data['gender'], state = form_data['state'], source = form_data['source'], register_at = form_data['register_at'], importance = form_data['importance'], remaining = form_data['remaining'], level = form_data['level'], feature = form_data['feature'], company_name = form_data['company'] ).order_by(register_order, remaining_order, level_order) now question :some of form data fields may null, cause forms input user, , he/she can choose input fields, wonder if code work when fields null, if not, how rewrite queryset based on fields user inputs?
the logic this:
# start students = student.objects.filter(sales=current_user) value = form.cleaned_data.get('nickname', none) if value not none: students = students.filter(nickname=value) # etc, etc ... # end students = students.order_by(register_order, remaining_order, level_order) but of course, ugly considering how many fields have. instead, have this:
students = student.objects.filter(sales=current_user) fields = ['nickname', 'mobile', 'gender', ....] field in fields: value = form.cleaned_data.get(field, none) if value not none: students = students.filter(**{field: value}) students = students.order_by(register_order, remaining_order, level_order) or, using all fields of form:
students = student.objects.filter(sales=current_user) key, value in form.cleaned_data.items(): if value not none: students = students.filter(**{key: value}) students = students.order_by(register_order, remaining_order, level_order) note we're testing if value not none instead of if value, allow '0' values pass test.
Comments
Post a Comment