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.

