Djangoで外部キーを設定したときのフィールド表示
admin画面での外部キーの表示
下記の様に外部キーを設定して、admin.pyに各モデルを登録して、Djangoのadmin画面でモデルを管理するときの外部キーの表示方法について。Orderモデルのuser_idキー(外部キー)の表示は、参照元たるPaymentUserのstr()に依存することに注意。このstr()がないと、「PaymentUser Object」の様に表示され、どの様な値が入って居るのか全く判らなくなる。
class PaymentUser(models.Model) : user_id = models.IntegerField(primary_key=True) username =models.CharField(max_length=100) def __str__(self): return u'%s' % (self.user_id) class Order(models.Model) : order_id=models.IntegerField(primary_key=True) user_id=models.ForeignKey(PaymentUser) amount=models.IntegerField()
以下にstr()の有無で表示がどう変化するか比較画像をあげた。
str()が定義されて居ないと、オブジェクト名だけの表示となる
str()が定義された場合の外部キーの表示
参照元
The Django admin site | Django documentation | Django
上記リンク先に「A few special cases to note about list_display:」なる但し書きがあって、
If the field is a ForeignKey, Django will display the str() (unicode() on Python 2) of the related object.
とある。