D'oh! I must have clicked "reply to author" (I'm so used to hitting
"reply to all" in Gmail).

I discovered a post which gives an example of Itay's suggestion in
action: 
http://yuji.wordpress.com/2009/09/12/django-python-dynamically-create-queries-from-a-string-and-the-or-operator/.

I also found this section of Python's documentation useful:
http://docs.python.org/tutorial/controlflow.html#keyword-arguments.

Thanks for your replies. Sorry for being slow on the uptake. I am
relatively new to Python and didn't realize that it's possible to pass
a dictionary to a function in place of arguments. Cool!


On Feb 5, 2:25 am, Itay Donenhirsch <i...@bazoo.org> wrote:
> i don't see any way for a python function to _require_ a parameter to
> be hardcoded.
> i would be VERY surprised otherwise. this must work...
> i agree about python being designed awesomely though! :)
>
> On Thu, Feb 4, 2010 at 3:13 PM, davidchambers
>
> <david.chambers...@gmail.com> wrote:
> > Thanks for the suggestion. Unless I'm mistaken, though, using a
> > dictionary does not solve the problem which is that .filter() seems to
> > require field names to be hard-coded. Django is incredibly well
> > designed, though, and continually surprises me, so I'm almost
> > _expecting_ to be pleasantly surprised here. :)
>
> > On Feb 5, 12:23 am, Itay Donenhirsch <i...@bazoo.org> wrote:
> >> i guess you can do it with a dictionary, i'll give you a general example:
>
> >> def foo(x,y,z):
> >>   print "x=" + x
> >>   print "y=" + y
> >>   print "z=" + z
>
> >> d = { 'x' : 1, 'y': 2, 'z' : 3 }
> >> foo( **d ) # same as foo( x=1, y=2, z=3 )
>
> >> it's a python thing, not django necessarily
>
> >> On Thu, Feb 4, 2010 at 1:20 PM, davidchambers
>
> >> <david.chambers...@gmail.com> wrote:
> >> > I'm familiar with hard-coding filters in the standard fashion, e.g.
> >> > posts = Post.objects.filter(title__contains='django').
>
> >> > I'm interested in finding out whether it's possible to replace
> >> > title__contains in the above example with a variable. Why do I want to
> >> > do this? Well, here's some pseudocode:
>
> >> > posts = Post.objects.all()
> >> > if title checkbox is checked:
> >> >        posts = posts.filter(title__contains='django')
> >> > if subheading checkbox is checked:
> >> >        posts = posts.filter(subheading__contains='django')
> >> > if body checkbox is checked:
> >> >        posts = posts.filter(body__contains='django')
>
> >> > I would love to be able to do this with a loop:
>
> >> > posts = Post.objects.all()
> >> > for field in ['title', 'subheading', 'body']:
> >> >        posts = posts.filter(field__contains='django')
>
> >> > Clearly the above will not work, but is there a way to achieve the
> >> > result I'm after?
>
> >> > --
> >> > You received this message because you are subscribed to the Google 
> >> > Groups "Django users" group.
> >> > To post to this group, send email to django-us...@googlegroups.com.
> >> > To unsubscribe from this group, send email to 
> >> > django-users+unsubscr...@googlegroups.com.
> >> > For more options, visit this group 
> >> > athttp://groups.google.com/group/django-users?hl=en.
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Django users" group.
> > To post to this group, send email to django-us...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > django-users+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/django-users?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to