On Fri, 2007-11-02 at 13:42 -0400, Karen Tracey wrote:
> On 11/2/07, Goutham D L <[EMAIL PROTECTED]> wrote:
>         Hi,
>         Iam having a problem in querying.
>         
>         i have a string called search_by which stores the name of one
>         of my models.
>         I want to call search_by.objects.all()
>         But it is giving an error since search_by is a string and
>         cannot be directly concatenated. 
>         Can someone help me get the query right?
> 
> The way I found to do this when I was starting out:
> 
> from django.db.models import get_model
> model = get_model('my_app_name', model_name_string) 
> 
> Then I can do model.objects().whatever...
> 
> I found get_model by looking at the Django code, not in the
> documentation.  I was a little concerned about using it and relying on
> undocumented Django internals but when I posted here querying if my
> use was legit (or if there was a better way) the feedback I got was
> that it was probably OK.  That's how the core Django code transforms a
> string into a model object so it's not likely to disappear. 

This is still probably a valid approach (there's lots of code that
relies on loading.get_model()).

Another way, though, is to use the ContentTypes application. The
lower-case version of the model name is stored in the 'model' field of
the ContentType model, so:

        ct = ContentType.objects.filter(model=model_name_string.lower())
        model_obj = ct.model_class()
        
does the same job. Okay, there's a database lookup here and it's
basically doing the same thing as Karen's solution under the covers. In
some situations, though, using ContentType might provide a nicer
interface, particularly if you need to do more than just filter on the
name.

Regards,
Malcolm


-- 
Remember that you are unique. Just like everyone else. 
http://www.pointy-stick.com/blog/


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

Reply via email to