テクデップ(Techdep)

コンピュータ、プログラミング、DTP(InDesign)に関する備忘録

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()の有無で表示がどう変化するか比較画像をあげた。

f:id:seizo_igawa:20150625225222j:plain

str()が定義されて居ないと、オブジェクト名だけの表示となる

f:id:seizo_igawa:20150625225247j:plain

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.

とある。