2016-05-18 6 views
-1

管理パネルで、親モデルの位置タイトルにドロップダウンの表示名を付けたいとします。デフォルトでは、リストにはすべての項目の「SNMPData Object」が表示されます。Django admin - forgeignキーのテキストを表示名として返します

しかし、私は、サイト名を表示したい、私はそれがself.locationを追加するが、それはエラーに

エラー投げているのと同じくらい簡単だと思った:

coercing to Unicode: need string or buffer, MajorSiteInfoData found 

コード:

class MajorSiteInfoData(models.Model): 
    Location = models.CharField(max_length=200) 

    class Meta: 
      verbose_name = "Major Site Locations" 
      verbose_name_plural = "Major Site Locations"  

    def __unicode__(self): 
     return self.Location 

class SNMPData(models.Model): 
    Location = models.ForeignKey(MajorSiteInfoData) 
    SNMP_AUTH = models.CharField(max_length=200) 
    SNMP_PRIV = models.CharField(max_length=200) 

    class Meta: 
      verbose_name = "SNMP Data" 
      verbose_name_plural = "SNMP Data" 

    def __unicode__(self): 
     return self.Location 

答えて

3

__unicode__関数は、表示したい文字列を返す必要があります。あなたの関数は次のようになります。改善する

def __unicode__(self): 
    return self.Location.Location 

一つのことを、あなたは時々あなたがLocationを必要とし、時にはあなたは、上記のようにLocation.Locationを必要とするので、すぐに自分自身を混乱させる可能性がある、異なるモデルで同じフィールド名を使用しないでください。外部キーの名前をmajor_site_infoのように変更します。フィールド名にアンダースコアを付けた小文字も使用します。キャメルケースはPythonのクラス名用です。

+0

私はすべてのモデル名を変更したら、sqlmigrateを実行する必要がありますか? – AlexW

+0

モデル名は問題ありません。フィールド名はPEP8に準拠していません。フィールド名を変更する場合は、これを行うためにdjangoの移行を作成する必要があります:https://docs.djangoproject.com/en/1.9/ref/migration-operations/#renamefield。 –

+0

すべて完了しました。ありがとう – AlexW

関連する問題