2016-08-01 1 views
1

Es scheint, ich kann nicht Dropdown-Wert stattdessen Objekt erhalten.Django - Wie DropDown-Wert stattdessen Objekt anzeigen?

enter image description here

form.html

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

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

models.py

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}) 

Bitte Beratung. Vielen Dank.

Antwort

3

Sie sollten __str__ (oder __unicode__ wenn Python 2) in das Objektmodell implementieren.

Von Django docs:

Django verwendet str (obj) in einer Reihe von Orten. Dies gilt insbesondere für die Anzeige eines Objekts in der Django-Verwaltungssite und für den Wert, der beim Anzeigen eines Objekts in eine Vorlage eingefügt wird. Daher sollten Sie immer eine schöne, menschenlesbare Darstellung des Modells aus der str() -Methode zurückgeben.

+0

Ich ziehe diese Option auch, aber Sie können auch eine manuelle Form Rendering in Vorlage verwenden. – ubombi

+0

Ich versuche es zuerst. –

+0

@ Dato'MohammadNurdin Jedes Mal, wenn Django versucht, ein Objekt anzuzeigen, sucht es nach seiner Methode '__str__'. Der Rückgabewert dieser Methode bestimmt, wie das Objekt angezeigt wird. – DeepSpace

0

Aktualisieren Sie Ihre models.py wie folgt aus:

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

Ich werde es zuerst versuchen. –

+0

Ich möchte, dass diese drei Dinge angezeigt werden, "FacebookAccount .account_description", "FacebookFanPage.FacebookAccount .account_description" und "PredefinedMessage. List_name". Bitte überprüfen Sie mein aktualisiertes Modell. –