2016-03-14 55 views
2

我有这个model.pyDjango的脆皮Multichoices表(外键)正在打印 “对象”,而不是Object.name

class BD(models.Model): 
    b_Name = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.b_Name 


class Data(models.Model): 
    o_name = models.CharField(verbose_name='Enter your Name', max_length=100) 
    d_name = models.CharField(max_length=100) 
    b = models.ForeignKey(BD) 

而且我有这个form.py:

from django import forms 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Submit, Layout, Field 
from crispy_forms.bootstrap import (
    PrependedText, PrependedAppendedText, FormActions) 

from .models import Data, BD 


class Form(forms.ModelForm): 
    class Meta: 
     model = Data 
     fields = ('o_name', 'd_name', 'b') 
    helper = FormHelper() 
    helper.form_method = 'POST' 
    helper.add_input(Submit('Submit', 'Submit', css_class='btn-primary')) 

问题与b一起。 因此,如果我正确理解这是如何工作的,则外键使django获取包含在我的postgresql服务器上的一个名为“data_DB”的表中的某个对象。
我没有得到的是,对于b,香脆应该生成一个列表框,其中包含我的postgresql表的每行的b_name,而它只显示“BD对象”作为选择,尽可能多的时间表。

我认为功能:

def __unicode__(self): 
     return self.b_Name 

是为了回报我所感兴趣的对象,而不是对象本身。

我误解了什么?

编辑:这就是HTML输出:

<select class="select form-control" id="id_b" name="b"> 
<option value="" selected="selected">---------</option> 
<option value="2">BData object</option> 
<option value="1">BData object</option> 
<option value="3">BData object</option> 
</select> 

值应该是BDdate.b_Name

+0

您使用的是什么版本的Python? –

+0

带有virtualenv的Python 3.5。我忘了提及它。 – BoobaGump

回答

2

在Python 3,你应该使用__str__,而不是__unicode__来定义模型的字符串表示。请参阅models documentation中的示例。