Djangoのモデル定義で下記「【Before】.models」のように外部キー(ForeignKey)を設定させ、テンプレートで{{ bar.bar }}と書いても「Bar object (XX)」と画面表示されて困っている方いらっしゃいませんでしょうか。
これはモデルクラスのスーパークラス(django.db.models.Model)にある__str__(self)関数の影響です。この関数が呼ばれると上記のような表記でクラスのstrを返してしまいます。したがって、この__str__str(self)を下記「【After】.models」にある赤字のように書いてDBの値のままのstr表記を返すようオーバーライドしてあげれば解消できます。
【Before】.models
class Foo(models.Model): foo = models.CharField(max_length=1) class Bar(models.Model): bar = models.ForeignKey(Foo, on_delete=models.CASCADE) baz = models.CharField(max_length=10)
django.db.models.Model
def __str__(self): return '%s object (%s)' % (self.__class__.__name__, self.pk)
【After】.models
class Foo(models.Model): foo = models.CharField(max_length=1) # Add def __str__(self): return self.foo class Bar(models.Model): bar = models.ForeignKey(Foo, on_delete=models.CASCADE) baz = models.CharField(max_length=10)