2016-08-01 34 views
1

私はオブジェクトの代わりにドロップダウン値を取得できないようです。Django - オブジェクトの代わりにドロップダウン値を表示するには?

enter image description here

models.py

{% extends "base.html" %} 
{% load i18n %} 

{% block content %} 
<form method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 
{% endblock %} 

form.html

class FacebookAccount(models.Model): 
    user = models.ForeignKey(User) 
    account_description = models.CharField(max_length=50) 
    facebook_application_id = models.CharField(max_length=50) 
    facebook_application_secret = models.CharField(max_length=50) 
    ouath_token = models.CharField(max_length=50) 

class FacebookFanPage(models.Model): 
    facebook_account = models.ForeignKey(FacebookAccount) 
    fan_page_description = models.CharField(max_length=50) 
    fan_page_id = models.CharField(max_length=30) 

class PredefinedMessage(models.Model): 
    user = models.ForeignKey(User) 
    list_name = models.CharField(max_length=50) 
    list_description = models.CharField(max_length=50) 

class Campaign(models.Model): 
    user = models.ForeignKey(User) 
    campaign_name = models.CharField(max_length=50) 
    autoresponder_type = (
     ('Send replies to inbox messages','Send replies to inbox messages'), 
     ('Post replies to users comments','Post replies to users comments'), 
    ) 
    facebook_account_to_use = models.ForeignKey(FacebookAccount) 
    set_auto_reply_for_fan_page = models.ForeignKey(FacebookFanPage) 
    message_list_to_use = models.ForeignKey(PredefinedMessage) 
    reply_only_for_this_keyword = models.CharField(max_length=50) 

views.py

class AutoresponderForm(ModelForm): 
    class Meta: 
     model = Campaign 
     fields = ['campaign_name','facebook_account_to_use','set_auto_reply_for_fan_page','message_list_to_use','reply_only_for_this_keyword'] 
     exclude = ('user',) 

def autoresponder_create(request, template_name='form.html'): 
    form = AutoresponderForm(request.POST or None) 
    if form.is_valid(): 
     form = form.save(commit=False) 
     form.user = request.user 
     form.save() 
     return redirect('autoresponder_list') 
    return render(request, template_name, {'form':form}) 

してくださいアドバイス。ありがとうございました。

答えて

3

オブジェクトのモデルに__str__(または__unicode__の場合はPython 2)を実装する必要があります。 Djangoのdocsから

Djangoは多くの場所でSTR(OBJ)を使用しています。特に、Django管理サイトにオブジェクトを表示し、オブジェクトを表示するときにテンプレートに挿入する値として指定します。したがって、str()メソッドから、人間が読める形式のモデルを返すべきです。このような

+0

は、私も、このオプションを好むが、また、あなたはテンプレートに手動でフォームのレンダリングを使用することができます。 – ubombi

+0

まず試してみます。 –

+0

@ Dato'MohammadNurdin Djangoはオブジェクトを表示しようとするたびに、モデルの '__str__'メソッドを探します。このメソッドの戻り値は、オブジェクトの表示方法を決定します。 – DeepSpace

0

更新しますmodels.py:

class Campaign(models.Model): 
    user = models.ForeignKey(User) 
    campaign_name = models.CharField(max_length=50) 
    autoresponder_type = (
     ('Send replies to inbox messages','Send replies to inbox 
     messages'), 
     ('Post replies to users comments','Post replies to users comments'), 
    ) 
    facebook_account_to_use = models.ForeignKey(FacebookAccount) 
    set_auto_reply_for_fan_page = models.ForeignKey(FacebookFanPage) 
    message_list_to_use = models.ForeignKey(PredefinedMessage) 
    reply_only_for_this_keyword = models.CharField(max_length=50) 

    def __unicode__(self): 
    return self.campaign_name # or you can use any string value instead of campaign_name 
+0

私はまずそれを試します。 –

+0

"FacebookAccount .account_description"、 "FacebookFanPage.FacebookAccount .account_description"、 "PredefinedMessage。list_name"の3つの項目を表示します。更新されたモデルを確認してください。 –

関連する問題