ccsv
ccsv

Reputation: 8669

Django defining __str__ for nested foreign key

Using a nested model like this:

class Gov(models.Model):
    name = models.CharField(max_length=20)
    def __str__(self):
        return self.name

class State(models.Model):
    parent = models.ForeignKey(Gov)
    abbreviation = models.CharField(max_length=100)
    def __str__(self):
        return self.parent.name

class State_Park(models.Model):
    parent = models.ForeignKey(State)
    park_name = models.CharField(max_length=100)

How would I set __str__ for class State_Park to be name in class Gov?

I tried:

def __str__(self):
    return self.parent.parent.name

which did not work.

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\ccsv\Envs\wenv\lib\site-packages\django\db\models\query.py", line 229, in __repr__
    return '<%s %r>' % (self.__class__.__name__, data)
  File "C:\Users\ccsv\Envs\wenv\lib\site-packages\django\db\models\base.py", line 589, in __repr__
    u = six.text_type(self)
  File "C:\Users\ccsv\Desktop\wenv\mysite\stats\models.py", line 89, in __str__
    return self.parent.parent.name()
TypeError: 'str' object is not callable

Upvotes: 2

Views: 1394

Answers (2)

user8060120
user8060120

Reputation:

in your real code is

return self.parent.parent.name()

just remove brackets

return self.parent.parent.name
#                            ^^^

Upvotes: 4

Taka Liew
Taka Liew

Reputation: 91

 File "C:\Users\ccsv\Desktop\wenv\mysite\stats\models.py", line 89, in __str__
return self.parent.parent.name()

Based on the error log, I think you should remove the parenthesis at the end of your line.

    def __str__(self):
        return self.parent.parent.name

Upvotes: 3

Related Questions