On Thu, May 24, 2012 at 9:29 AM, bruno desthuilliers
<bruno.desthuilli...@gmail.com> wrote:
> On May 24, 3:44 pm, Larry Martell <larry.mart...@gmail.com> wrote:
>> On Thu, May 24, 2012 at 2:27 AM, bruno desthuilliers
>>
>> <bruno.desthuilli...@gmail.com> wrote:
>> > On May 23, 10:39 pm, Larry Martell <larry.mart...@gmail.com> wrote:
>> >> I was asked to make a mod to a large django app that I didn't write.
>> >> They wanted me to add a derived field to a query, e.g. select
>> >> col1-col2 from table ...
>>
>> > I assume you're talking about using queryset.extra ?
>>
>> No I build the query myself.
>
> Are you using the ORM at all ?

Oh yes. Just this particular query is complicated and more easily
directly created.

>> >> I did that and it works, but in some other part of the code it calls
>> >> getattr(object, field) and when field == col1-col2 it blows up
>> >> with"object has no attribute 'col1-col2'"
>>
>> > Are you sure the instance on which it failed was retrieved using the
>> > appropriate query ?
>>
>> That could be the case. What happens is the data set returned creates
>> a chart. The points on the chart are clickable links that drill down
>> and generate a more detailed chart. It's in that secondary chart that
>> the error occurs. But OTOH, getattr does retrieve the attributes of
>> the actual columns from the initial query, so it much be the same
>> instance.
>
> Except that, very obviously, it isn't.

Correct. I dug into it more, and it's completely different query and context.

>> > Can you post the relevant parts of your code ? (here or via dpaste ?)
>>
>> Unfortunately, no. It's a lot of code with a ton of inherited classes.
>
> Uhu. Real life vs example code, as usual. So all you can do is trace
> your code using the logging module (or print statements) and the
> debugger.

I got this to work by adding the derived field to the drill down query
with queryset.extra, and then it was available with getattr. The only
issue I had was they wanted the derived field displayed with a name
(not col1-col2). In the first query I was able to easily do this. But
in the drill down query I had to do:

extra(select={self.field_name : self.field_name})

I couldn't use the display name or the getattr failed. But then it was
displaying with 'col1-col2'. So then I had to explicitly test for it
and set the display name:

            if field_name == 'col1-col2': display_name = 'Delta'
            else: display_name = field_name

Which will quickly get very ugly when they want more derived fields
added (which I know they will).

But I'll deal with that when the time comes.

Thanks for your help.

-larry

-- 
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 
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