Having recently upgraded to Django 1.1, I suddenly started getting the error messages that look like:
File "/Library/Python/2.6/site-packages/django/db/models/fields/related.py", line 257, in __get__
rel_obj = QuerySet(self.field.rel.to).get(**params)
File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 300, in get
num = len(clone)
File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 81, in __len__
self._result_cache = list(self.iterator())
File "/Library/Python/2.6/site-packages/django/db/models/query.py", line 251, in iterator
obj = self.model(*row[index_start:aggregate_start])
File "/Library/Python/2.6/site-packages/django/db/models/base.py", line 324, in __init__
signals.post_init.send(sender=self.__class__, instance=self)
File "/Library/Python/2.6/site-packages/django/dispatch/dispatcher.py", line 166, in send
response = receiver(signal=self, sender=sender, **named)
File "/Library/Python/2.6/site-packages/django/db/models/fields/files.py", line 368, in update_dimension_fields
(self.width_field and not getattr(instance, self.width_field))
AttributeError: 'Icon' object has no attribute 'width'
The issue turns out to be that you can’t just define the ImageField in your model, you also have to explicitly define the fields that will store the width and height fields for the image field. The sql generation tools for Django don’t do it for you.
For various reasons, I can’t do that this at this moment so I made the following I hack which I strongly recommend you don’t use (for efficiency reasons, as with this the height & width have to be computed every time you access the image). This is added to site-packages/django/db/models/fields around line 367.
if self.width_field and not hasattr(instance, self.width_field):
dimension_fields_filled = False
else:
dimension_fields_filled = not(
(self.width_field and not getattr(instance, self.width_field))
or (self.height_field and not getattr(instance, self.height_field))
)
The proper solutions probably involve: