views:

79

answers:

1

I'm building a small web project using Django that has one model (Image) that contains an ImageField. When I try to upload an image using the admin interface I am presented with this problem (personally identifying information removed):

RuntimeError at /admin/main/image/add/

maximum recursion depth exceeded

Request Method:     POST
Request URL:    http://x.x.x.x:8080/blog/admin/main/image/add/
Django Version:     1.2.1
Exception Type:     RuntimeError
Exception Value:    

maximum recursion depth exceeded

Exception Location:     /extra/django/blog/main/models.py in __unicode__, line 26
Python Executable:  /usr/bin/python
Python Version:     2.4.3
Python Path:    ['/extra/django', '/usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg', '/usr/lib/python2.4/site-packages/MySQL_python-1.2.3-py2.4-linux-i686.egg', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/Numeric', '/usr/lib/python2.4/site-packages/PIL', '/usr/lib/python2.4/site-packages/gtk-2.0']
Server time:    Tue, 17 Aug 2010 13:30:20 -0400

And this is a portion of my models.py:

class Image(models.Model):
image = models.ImageField(upload_to='uploads/blog_images')
caption = models.CharField(max_length=300)
post = models.ForeignKey('Post')
thumbWidth = models.IntegerField(blank=True,null=True)
thumbHeight = models.IntegerField(blank=True,null=True)
def printTag(self, newClass=''):
    str = '<img '
    if newClass is not '':
        str = str + 'class="%s" ' %newClass
    if self.thumbWidth is not None and self.thumbHeight is not None:
        str += 'width="%i" height="%i" ' %(self.thumbWidth,self.thumbHeight)
    str = str + 'src="%s" ' %self.image
    str = str + '>%s</img>' %self.caption
    return str
def __unicode__(self):
    return self.printTag(self)

Line 26 is the only line inside unicode. I have the extra function (printTag) so I can choose whether or not to print the HTML tag with a "class" attribute with the default being without the attribute. Why is it recursing when I upload an image?

+3  A: 

You need return self.printTag() not return self.printTag(self)

stevejalim
To be clearer (now I'm back at my computer), your printTag() method belongs to the model, and as such implicitly gets self as the first argument. By calling self.printTag(self), that means that the object is being accepted as the *second* argument as well, which means that your code thinks it's newClass, and then tries to splice in the __unicode__ representation of the object again (as newClass), which causes the recursion.
stevejalim
that was it. thanks for the explanation.
puddingfox