Hi folks,

I'm working on a codebase (a fork of http://code.google.com/p/ebcode/)
that is supposed to be run against Django 1.1. It has several lines
like this:

    clone.query.extra_where += ('db_newsitem.id =
db_attribute.news_item_id',)

That line raises a traceback like this:

Traceback (most recent call last):
  File "./everyblock/everyblock/cities/boston/building_permits/
retrieval.py", line 90, in <module>
    PermitScraper().update()
  File "/home/pw/builds/openblock/builds/20100824/ebdata/ebdata/
retrieval/scrapers/newsitem_list_detail.py", line 208, in update
    super(NewsItemListDetailScraper, self).update()
  File "/home/pw/builds/openblock/builds/20100824/ebdata/ebdata/
retrieval/scrapers/list_detail.py", line 112, in update
    self.update_from_string(page)
  File "/home/pw/builds/openblock/builds/20100824/ebdata/ebdata/
retrieval/scrapers/list_detail.py", line 140, in update_from_string
    old_record = self.existing_record(list_record)
  File "./everyblock/everyblock/cities/boston/building_permits/
retrieval.py", line 65, in existing_record
    qs = qs.by_attribute(self.schema_fields['raw_address'],
record['address'])
  File "/home/pw/builds/openblock/builds/20100824/ebpub/ebpub/db/
models.py", line 317, in by_attribute
    clone = self.prepare_attribute_qs()
  File "/home/pw/builds/openblock/builds/20100824/ebpub/ebpub/db/
models.py", line 300, in prepare_attribute_qs
    clone.query.extra_where += ('db_newsitem.id =
db_attribute.news_item_id',)
AttributeError: 'GeoQuery' object has no attribute 'extra_where'


For more context, the relevant models.py code is at
http://github.com/openplans/openblock/blob/master/ebpub/ebpub/db/models.py
and `clone.query` is an instance of
django.contrib.gis.db.models.sql.query.GeoQuery, which inherits from
the usual BaseQuery.

Now, I've found by googling and downloading old releases that
django.db.models.sql.query.BaseQuery had an extra_where attribute as
of Django 1.0, but it's gone in Django 1.1.
And from looking at recent and old versions of the docs, I don't think
that extra_where was ever really part of the API; you're probably not
supposed to twiddle it directly.

I haven't yet found a documented way to solve this.
http://docs.djangoproject.com/en/dev/ref/models/querysets/ talks about
the .extra(where=...) method,
but that's part of the manager API and the QuerySet API, not the Query
API.

The one thing I've found, by poking around in the django source, is to
call clone.query.where.add(ExtraWhere(...)) but it's not clear to me
whether that's really part of the API either. Is there a better /
"correct" way?

Thanks,

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