2017-06-20 18 views
0

私は小さなチャットアプリを作成していますが、フィールドchatMessagemieモデルのドロップダウンのために管理者にメッセージを作成する際に問題があります。下の図には、Conversationモデルに関連する必要な値は表示されていません。 Conversationモデルのconversationフィールドが受け入れる値は "number-number"という形式です。 5-10,などです。以下のような入力形式を、Django以外の管理者入力用の文字列(ユーザーが新しい会話を開始したとき)に変換するメカニズムを作成しました。Django管理者が外部キーフィールドの選択を表示しない

conversationフィールドはCharFieldです。私はDjango管理フォームがfieldタイプのために必要な値を示していない理由は疑いますが、わかりません。また、Djangoの管理者が入力を文字列に変換していないので、ドロップダウン内にちょうどConversation objectが表示される可能性があります。 Django管理者がchat入力フィールドに正しい値を表示しないのはなぜですか? adminにConversationモデルDjangoの管理における入力値の

enter image description here

写真をMessagemieモデルchatフィールド選択を示す

@python_2_unicode_compatible 
class Conversation(models.Model): 
    conversation = models.CharField(unique=True, max_length=150) 
    email_1 = models.ForeignKey(Usermie, to_field="email", related_name="email_1_convo") 
    email_2 = models.ForeignKey(Usermie, to_field="email", related_name="email_2_convo") 



@python_2_unicode_compatible 
class Messagemie(models.Model): 
    sender = models.ForeignKey(Usermie, to_field="email", related_name="email_sender") 
    receiver = models.ForeignKey(Usermie, to_field="email", related_name="email_receiver") 
    # The username is the sender's username 
    sender_username = models.CharField(max_length=50) 
    receiver_username = models.CharField(max_length=50) 
    message = models.TextField() 
    chat = models.ForeignKey(Conversation, to_field="conversation", related_name="conversation_chat") 

ピクチャー。 enter image description here

答えて

2

Django管理者は、オブジェクトの文字列表現をドロップダウンに表示します。これはstr(object)と呼ぶことで得られます。この動作は、クラス内の__str__メソッドをオーバーライドすることで変更できます。

Djangoのベースモデルクラス(django.db.models.Model)の実装では、(のpython3のために)、以下のような実装を持っている -

def __str__(self): 
    return str('%s object' % self.__class__.__name__) 

あなたが見るものを説明しています。 self.__class__.__name__"Conversation"と評価され、結果的にドロップダウンに"Conversation object"が表示されます。

この動作を変更するには、__str__メソッドをオーバーライドして、目的の値が返されるようにします。 1つのサンプルの実装は以下のとおりです。メソッドを簡単に変更して、必要なロジックを含めることができます。

class Conversation(models.Model): 
    conversation = models.CharField(unique=True, max_length=150) 
    email_1 = models.ForeignKey(Usermie, to_field="email", 
           related_name="email_1_convo") 
    email_2 = models.ForeignKey(Usermie, to_field="email", 
           related_name="email_2_convo") 

    def __str__(self): 
     return self.conversation 
+0

ありがとうございました。あなたの答えは次の質問にも答えます。私はなぜ人々が '__str__'メソッドを使用しているのか疑問に思っています。どのメソッドを使っても、単に'%s'を使って欲しいものを出力することができます。どうもありがとうございます! – Jam1

+0

うれしい私は助けることができました! –

関連する問題