Great.
It is similar to django-filters. It looks like the maintainer of filters 
and I started our projects at about the same time. I think that my version 
provides more extension hooks out of the box, but also requires more 
development for filtering on string-based fields. I may build out on some 
of the ideas that django-filters uses for string fields.
Compared to django-datafiters, I think mine is more extensible and I have 
more documentation.

Kirby

On Wednesday, February 25, 2015 at 5:15:01 PM UTC-6, Ronaldo Bahia wrote:
>
> Hi Kirby,
>
> It seems very interesting. I'll let you know if I try it.
> Just for curiosity, what differentiates your project from django-filters 
> or django-datafilters ?
>
> Thanks.
>
>
> *Ronaldo Bahia *
>
> 2015-02-24 12:57 GMT-03:00 C. Kirby <[email protected] <javascript:>>:
>
>> I'm sorry I missed this thread at the beginning. I have an app that 
>> basically gives you the ability to build "advanced search" forms in almost 
>> the same way as model forms. You can take a look at it at 
>> https://github.com/ckirby/django-modelqueryform
>>
>> If you try it or at least look at it, please let me know what you think. 
>> I am successfully using it in 3 different projects.
>>
>> Best,
>> Kirby
>>
>> On Monday, February 23, 2015 at 6:33:32 PM UTC-6, Vijay Khemlani wrote:
>>>
>>> You're welcome, glad I could help :D
>>>
>>> On Mon, Feb 23, 2015 at 5:25 PM, Ronaldo Bahia <[email protected]> 
>>> wrote:
>>>
>>>> Awesome! Now it works perfectly.
>>>>
>>>> I'm updating my stackoverflow code for anyone facing the same doubt.
>>>>
>>>> Thanks a lot man!!!!
>>>>
>>>>
>>>> Em segunda-feira, 23 de fevereiro de 2015 13:02:06 UTC-3, Vijay 
>>>> Khemlani escreveu:
>>>>>
>>>>> Change the declaration of the funciotn
>>>>>
>>>>> def filter_job_candidates(job):
>>>>>
>>>>> to
>>>>>
>>>>> def filter_job_candidates(self, job):
>>>>>
>>>>> And the filtering depends on the particular job being displayed on the 
>>>>> view, if you change the line to
>>>>>
>>>>> Job.objects.applied_to.all()
>>>>>
>>>>> Then it would filter the candidates for all the jobs, not the 
>>>>> particular one the user is seeing on the view (the one that is passed to 
>>>>> the form method).
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Feb 23, 2015 at 12:31 PM, Ronaldo Bahia <[email protected]> 
>>>>> wrote:
>>>>>
>>>>>> Oh, I'm feeling stupid right now :D
>>>>>>
>>>>>> now my new error:
>>>>>>
>>>>>> filter_job_candidates() takes exactly 1 argument (2 given)
>>>>>>
>>>>>> in views.py
>>>>>>
>>>>>> job_candidates = form_cand.filter_job_candidates(self.object)
>>>>>>
>>>>>> I've tried to remove the arguments but django says "global name 
>>>>>> 'self' not defined"
>>>>>>
>>>>>> I also think that in forms.py the correct way to write is:
>>>>>>
>>>>>> def filter_job_candidates(job):
>>>>>> assert self.is_valid()
>>>>>>  job_candidates = Job.objects.applied_to.all()
>>>>>>
>>>>>> Or am I wrong?
>>>>>>
>>>>>> Sorry for bothering...
>>>>>>
>>>>>>
>>>>>>
>>>>>> Em segunda-feira, 23 de fevereiro de 2015 10:50:49 UTC-3, Vijay 
>>>>>> Khemlani escreveu:
>>>>>>>
>>>>>>> Oh, if it is that line I missed a parenthesis in the my previuos 
>>>>>>> snippet in the filter of haircolor
>>>>>>>
>>>>>>> job_candidates = job_candidates.filter(candidate__candidatelook__
>>>>>>> haircolor=self.cleaned_data['haircolor'])
>>>>>>>
>>>>>>> You also need to change the other filter
>>>>>>>
>>>>>>> job_candidates = job_candidates.filter(status=s
>>>>>>> elf.cleaned_data['status'])
>>>>>>>
>>>>>>> But you should ble able to detect that kind of errors, those are 
>>>>>>> Python things, not something specifically about Django.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Feb 23, 2015 at 7:40 AM, Ronaldo Bahia <[email protected]> 
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I have just updated my code in stackoverflow:
>>>>>>>> http://stackoverflow.com/questions/28637326/how-to-filter-re
>>>>>>>> sults-using-forms-in-django-best-approach
>>>>>>>>
>>>>>>>> *Ronaldo Bahia *
>>>>>>>> Diretor | JobConvo.com
>>>>>>>> Tel: 11 3280 6971
>>>>>>>>
>>>>>>>> 2015-02-22 23:16 GMT-03:00 Vijay Khemlani <[email protected]>:
>>>>>>>>
>>>>>>>>> Well, I think you can continue posting the updated code here or 
>>>>>>>>> pastebin or in the stackoverflow question, where other people can 
>>>>>>>>> suggest 
>>>>>>>>> solutions.
>>>>>>>>>
>>>>>>>>> What is the complete message you are getting in your syntax error? 
>>>>>>>>> can you upload your whole forms.py into pastebin or something?
>>>>>>>>>
>>>>>>>>> Regards
>>>>>>>>>
>>>>>>>>> On Sun, Feb 22, 2015 at 10:53 PM, Ronaldo Bahia <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Vijay,
>>>>>>>>>>
>>>>>>>>>> For some reason, I'm getting SyntaxError with self.cleaned_data 
>>>>>>>>>> in forms.py 
>>>>>>>>>>
>>>>>>>>>> I'd like you to teach me how to make this. I have no problem to 
>>>>>>>>>> share my project code.
>>>>>>>>>>
>>>>>>>>>> Do you think we can make it?
>>>>>>>>>>
>>>>>>>>>> Please, email me so we can discuss about it or add me in skype: 
>>>>>>>>>> bahiamartins
>>>>>>>>>>
>>>>>>>>>> Thanks very much
>>>>>>>>>>
>>>>>>>>>> Em sábado, 21 de fevereiro de 2015 20:49:21 UTC-2, Vijay Khemlani 
>>>>>>>>>> escreveu:
>>>>>>>>>>>
>>>>>>>>>>> If both forms are used in the same view, I see little reason to 
>>>>>>>>>>> make them separate and ModelForms, the form class I put above 
>>>>>>>>>>> should be a 
>>>>>>>>>>> better choice.
>>>>>>>>>>>
>>>>>>>>>>> In order to do the actual filtering, you can do something like 
>>>>>>>>>>> this
>>>>>>>>>>>
>>>>>>>>>>> class ScreeningForm(forms.Form):
>>>>>>>>>>>     haircolor = forms.ChoiceField(choices=Cand
>>>>>>>>>>> idateLook.HAIRCOLOR_CHOICES, required=False)
>>>>>>>>>>>     status = 
>>>>>>>>>>> forms.ChoiceField(choices=CandidateToJob.STATUS_CHOICES, 
>>>>>>>>>>> required=False)
>>>>>>>>>>>
>>>>>>>>>>>     def filter_job_candidates(job):
>>>>>>>>>>>         assert self.is_valid()
>>>>>>>>>>>
>>>>>>>>>>>         job_candidates = job.applied_to.all().order_by(
>>>>>>>>>>> 'candidate')
>>>>>>>>>>>
>>>>>>>>>>>         if self.cleaned_data['haircolor']:
>>>>>>>>>>>             # You need to change the "user" field in 
>>>>>>>>>>> CandidateLook to a OneToOneField for this to work, which doesn't 
>>>>>>>>>>> change 
>>>>>>>>>>> anything since the field is already a primary key that can't be 
>>>>>>>>>>> repeated 
>>>>>>>>>>> either way
>>>>>>>>>>>             job_candidates = job_candidates.filter(candidate__
>>>>>>>>>>> candidatelook__haircolor=self.cleaned_data['haircolor']
>>>>>>>>>>>
>>>>>>>>>>>         if self.cleaned_data['status']:
>>>>>>>>>>>             job_candidates = job_candidates.filter(status=self.
>>>>>>>>>>> cleaned_data['status']
>>>>>>>>>>>
>>>>>>>>>>>         return job_candidates
>>>>>>>>>>>
>>>>>>>>>>> And in your view...
>>>>>>>>>>>
>>>>>>>>>>> class Screening(generic.DetailView):
>>>>>>>>>>>
>>>>>>>>>>>     model = Job
>>>>>>>>>>>     template_name = 'dashboard/screening.html'
>>>>>>>>>>>
>>>>>>>>>>>     def get_context_data(self, **kwargs):
>>>>>>>>>>>         context = super(Screening, self).get_context_data(**
>>>>>>>>>>> kwargs)
>>>>>>>>>>>
>>>>>>>>>>>         # Fetch the sender_id for each unread message.
>>>>>>>>>>>         # Count the number of times that the sender_id was 
>>>>>>>>>>> included.
>>>>>>>>>>>         # Then convert the list of tuples into a dictionary for 
>>>>>>>>>>> quick lookup.
>>>>>>>>>>>         sent_messages = dict(
>>>>>>>>>>>             self.request.user.received_messages.filter(
>>>>>>>>>>>                 read_at__isnull=True
>>>>>>>>>>>             ).values('sender_id').annotate(
>>>>>>>>>>>                 messages_sent=Count('sender_id')
>>>>>>>>>>>             ).values_list('sender_id', 'messages_sent')
>>>>>>>>>>>         )
>>>>>>>>>>>
>>>>>>>>>>>         form = ScreeningForm(self.request.GET)
>>>>>>>>>>>
>>>>>>>>>>>         if form.is_valid():
>>>>>>>>>>>             job_candidates = form.filter_job_candidates(sel
>>>>>>>>>>> f.object)
>>>>>>>>>>>         else:
>>>>>>>>>>>             # Fallback, since the form will always be valid 
>>>>>>>>>>> unless someone tampered with the form parameters manually
>>>>>>>>>>>             job_candidates = self.object.applied_to.all().o
>>>>>>>>>>> rder_by('candidate')
>>>>>>>>>>>
>>>>>>>>>>>         candidates = []
>>>>>>>>>>>         for candidate in job_candidates:
>>>>>>>>>>>             candidate.messages_sent = sent_messages.get(
>>>>>>>>>>> candidate.candidate.user.id)
>>>>>>>>>>>             candidates.append(candidate)
>>>>>>>>>>>         context['candidate_list'] = candidates
>>>>>>>>>>>         context['form'] = form 
>>>>>>>>>>>
>>>>>>>>>>>         return context
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sat, Feb 21, 2015 at 9:57 AM, Ronaldo Bahia <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi Vijay,
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks for your response.
>>>>>>>>>>>> I've just updated my question in stackoverflow 'cause I forgot 
>>>>>>>>>>>> to show my forms.
>>>>>>>>>>>>
>>>>>>>>>>>> What I need is to enable a user (company) to filter results 
>>>>>>>>>>>> (candidates) based on forms selection (candidates' status and 
>>>>>>>>>>>> candidates' 
>>>>>>>>>>>> haircolors)
>>>>>>>>>>>>
>>>>>>>>>>>> And I don't know how to make this in my detailview.
>>>>>>>>>>>>
>>>>>>>>>>>> See the link: http://stackoverflow.com
>>>>>>>>>>>> /questions/28637326/how-to-filter-results-using-forms-in-dja
>>>>>>>>>>>> ngo-best-approach
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks
>>>>>>>>>>>>
>>>>>>>>>>>> Em sábado, 21 de fevereiro de 2015 00:33:34 UTC-2, Vijay 
>>>>>>>>>>>> Khemlani escreveu:
>>>>>>>>>>>>>
>>>>>>>>>>>>> It's not clear what's the purpose of the view you are showing. 
>>>>>>>>>>>>> ¿Is it supposed to display a form with "haircolor" and "status" 
>>>>>>>>>>>>> fields and 
>>>>>>>>>>>>> filter the results it displays based on that?
>>>>>>>>>>>>>
>>>>>>>>>>>>> In that case you can declare a form:
>>>>>>>>>>>>>
>>>>>>>>>>>>> from django import forms
>>>>>>>>>>>>>
>>>>>>>>>>>>> class ScreeningForm(forms.Form):
>>>>>>>>>>>>>     haircolor = forms.ChoiceField(choices=Cand
>>>>>>>>>>>>> idateLook.HAIRCOLOR_CHOICES)
>>>>>>>>>>>>>     status = forms.ChoiceField(choices=Cand
>>>>>>>>>>>>> idateToJob.STATUS_CHOICES)
>>>>>>>>>>>>>
>>>>>>>>>>>>> then you can use it in your view, for example to display it:
>>>>>>>>>>>>>
>>>>>>>>>>>>> class Screening(generic.DetailView):
>>>>>>>>>>>>>     model = Job
>>>>>>>>>>>>>     template_name = 'dashboard/screening.html'
>>>>>>>>>>>>>
>>>>>>>>>>>>>     def get_context_data(self, **kwargs):
>>>>>>>>>>>>>         context = super(Screening, self).get_context_data(**
>>>>>>>>>>>>> kwargs)
>>>>>>>>>>>>>         context['form'] = ScreeningForm()
>>>>>>>>>>>>>         return context
>>>>>>>>>>>>>
>>>>>>>>>>>>> HTML:
>>>>>>>>>>>>>
>>>>>>>>>>>>> <form method="get" action=".">
>>>>>>>>>>>>>     {{ form.as_p }}
>>>>>>>>>>>>>     <input type="submit" value="Filter" />
>>>>>>>>>>>>> </form>
>>>>>>>>>>>>>         
>>>>>>>>>>>>> (the code above just creates, displays and submits the form, 
>>>>>>>>>>>>> it does not filter your results yet)
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Fri, Feb 20, 2015 at 5:10 PM, Ronaldo Bahia <
>>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> I'm kind of new in python/django and I'd like to know: What's 
>>>>>>>>>>>>>> the best approach to filter results in Django using forms in a 
>>>>>>>>>>>>>> view?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I need to filter candidates by haircolor, according to the 
>>>>>>>>>>>>>> model CandidateLook and by status, according to CandidateToJob 
>>>>>>>>>>>>>> model.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks in advance.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Here is my code:
>>>>>>>>>>>>>> http://stackoverflow.com/questions/28637326/how-to-filter-re
>>>>>>>>>>>>>> sults-using-forms-in-django-best-approach
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>>>>>> Google Groups "Django users" group.
>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from 
>>>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>>>> To post to this group, send email to 
>>>>>>>>>>>>>> [email protected].
>>>>>>>>>>>>>> Visit this group at http://groups.google.com/group
>>>>>>>>>>>>>> /django-users.
>>>>>>>>>>>>>> To view this discussion on the web visit 
>>>>>>>>>>>>>> https://groups.google.com/d/msgid/django-users/bf338512-fa18
>>>>>>>>>>>>>> -4d97-a3e7-02588577e1a3%40googlegroups.com 
>>>>>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/bf338512-fa18-4d97-a3e7-02588577e1a3%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>>>>> .
>>>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>  -- 
>>>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>>>> Google Groups "Django users" group.
>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from 
>>>>>>>>>>>> it, send an email to [email protected].
>>>>>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>>>>>> .
>>>>>>>>>>>> Visit this group at http://groups.google.com/group/django-users
>>>>>>>>>>>> .
>>>>>>>>>>>> To view this discussion on the web visit 
>>>>>>>>>>>> https://groups.google.com/d/msgid/django-users/6c2b451d-a98e
>>>>>>>>>>>> -4dff-9cf9-3949d91dd435%40googlegroups.com 
>>>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/6c2b451d-a98e-4dff-9cf9-3949d91dd435%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>>>> .
>>>>>>>>>>>>
>>>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>  -- 
>>>>>>>>>> You received this message because you are subscribed to the 
>>>>>>>>>> Google Groups "Django users" group.
>>>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>>>> send an email to [email protected].
>>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>>> Visit this group at http://groups.google.com/group/django-users.
>>>>>>>>>> To view this discussion on the web visit 
>>>>>>>>>> https://groups.google.com/d/msgid/django-users/4dbec5ca-5099
>>>>>>>>>> -471e-a3ea-b92ae61a93b5%40googlegroups.com 
>>>>>>>>>> <https://groups.google.com/d/msgid/django-users/4dbec5ca-5099-471e-a3ea-b92ae61a93b5%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>> .
>>>>>>>>>>
>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>  -- 
>>>>>>>>> You received this message because you are subscribed to a topic in 
>>>>>>>>> the Google Groups "Django users" group.
>>>>>>>>> To unsubscribe from this topic, visit https://groups.google.com/d/
>>>>>>>>> topic/django-users/XfvhZjvQyEU/unsubscribe.
>>>>>>>>> To unsubscribe from this group and all its topics, send an email 
>>>>>>>>> to [email protected].
>>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>>> Visit this group at http://groups.google.com/group/django-users.
>>>>>>>>> To view this discussion on the web visit 
>>>>>>>>> https://groups.google.com/d/msgid/django-users/CALn3ei1rm0m0
>>>>>>>>> Fj7PW4f88pNyT8QPRkP8nwNSMG65ejyZ5T0bNw%40mail.gmail.com 
>>>>>>>>> <https://groups.google.com/d/msgid/django-users/CALn3ei1rm0m0Fj7PW4f88pNyT8QPRkP8nwNSMG65ejyZ5T0bNw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>>  -- 
>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>> Groups "Django users" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>> send an email to [email protected].
>>>>>>>> To post to this group, send email to [email protected].
>>>>>>>> Visit this group at http://groups.google.com/group/django-users.
>>>>>>>> To view this discussion on the web visit 
>>>>>>>> https://groups.google.com/d/msgid/django-users/CAGz5-6jAQwo6
>>>>>>>> PD32QJBOiVe1Tp8QWCEBSUY_Jwbc18zE9RFyXw%40mail.gmail.com 
>>>>>>>> <https://groups.google.com/d/msgid/django-users/CAGz5-6jAQwo6PD32QJBOiVe1Tp8QWCEBSUY_Jwbc18zE9RFyXw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>  -- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "Django users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at http://groups.google.com/group/django-users.
>>>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>>>> msgid/django-users/d3bb8bae-16ae-41e6-892c-2c655c627c25%40goog
>>>>>> legroups.com 
>>>>>> <https://groups.google.com/d/msgid/django-users/d3bb8bae-16ae-41e6-892c-2c655c627c25%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "Django users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/django-users.
>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>> msgid/django-users/be0d1bfc-a078-4485-9f30-f6d3d84ef7f9%
>>>> 40googlegroups.com 
>>>> <https://groups.google.com/d/msgid/django-users/be0d1bfc-a078-4485-9f30-f6d3d84ef7f9%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "Django users" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/django-users/XfvhZjvQyEU/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/django-users.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/dbaab235-49e9-455b-9099-c1b4676e105b%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/dbaab235-49e9-455b-9099-c1b4676e105b%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/5063dcbb-33df-43a1-8d1d-8441230dad71%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to