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.