I get the same issue when I rename to "SchoolItem",
Note that I have to use 'School' (which is a django model, not a scrapy DjangoItem) to retrieve the foreign key object from my database in Django.
course = CourseItem(name=course_name, ...., school=School.objects.filter(name=response.meta['school'])[0])
Doing that yields the "School is not JSON Serializable" error: full trace is:
2013-06-18 09:07:39-0500 [spider] ERROR: Error caught on signal handler: <
bound method ?.item_scraped of <scrapy.contrib.feedexport.FeedExporter object at
0xa5bbd0c>>
Traceback (most recent call last):
File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", lin
e 371, in _runCallbacks
self.result = callback(self.result, *args, **kw)
File "/usr/local/lib/python2.6/dist-packages/scrapy/core/scraper.py",
line 213, in _itemproc_finished
item=output, response=response, spider=spider)
File "/usr/local/lib/python2.6/dist-packages/scrapy/signalmanager.py",
line 23, in send_catch_log_deferred
return signal.send_catch_log_deferred(*a, **kw)
File "/usr/local/lib/python2.6/dist-packages/scrapy/utils/signal.py",
line 53, in send_catch_log_deferred
*arguments, **named)
--- <exception caught here> ---
File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", lin
e 117, in maybeDeferred
result = f(*args, **kw)
File "/usr/local/lib/python2.6/dist-packages/scrapy/xlib/pydispatch/ro
bustapply.py", line 47, in robustApply
return receiver(*arguments, **named)
File "/usr/local/lib/python2.6/dist-packages/scrapy/contrib/feedexport
.py", line 191, in item_scraped
slot.exporter.export_item(item)
File "/usr/local/lib/python2.6/dist-packages/scrapy/contrib/exporter/_
_init__.py", line 110, in export_item
self.file.write(self.encoder.encode(itemdict))
File "/usr/local/lib/python2.6/dist-packages/scrapy/utils/serialize.py
", line 89, in encode
return super(ScrapyJSONEncoder, self).encode(o)
File "/usr/lib/python2.6/json/encoder.py", line 367, in encode
chunks = list(self.iterencode(o))
File "/usr/lib/python2.6/json/encoder.py", line 309, in _iterencode
for chunk in self._iterencode_dict(o, markers):
File "/usr/lib/python2.6/json/encoder.py", line 275, in _iterencode_di
ct
for chunk in self._iterencode(value, markers):
File "/usr/lib/python2.6/json/encoder.py", line 317, in _iterencode
for chunk in self._iterencode_default(o, markers):
File "/usr/lib/python2.6/json/encoder.py", line 323, in _iterencode_de
fault
newobj = self.default(o)
File "/usr/local/lib/python2.6/dist-packages/scrapy/utils/serialize.py
", line 109, in default
return super(ScrapyJSONEncoder, self).default(o)
File "/usr/lib/python2.6/json/encoder.py", line 344, in default
raise TypeError(repr(o) + " is not JSON serializable")
exceptions.TypeError: <School: School object> is not JSON serial
izable