Django Crispy Multichoices Form (Foreignkey) 正在打印 "Object" 而不是 Object.name

Django Crispy Multichoices Form (Foreignkey) is printing "Object" instead of Object.name

我有这个model.py

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" 的 table 中包含的一些对象。
我没有得到的是,对于 b,crispy 应该生成一个列表框,其中包含我的 postgresql table 的每一行的 b_name 而它只显示 "BD object" 作为一个选择,尽可能多时间,因为我的 table 中有行。

我认为函数:

def __unicode__(self):
        return self.b_Name

的意思是 return 我感兴趣的对象而不是对象本身。

我误会了什么?

编辑:那是 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

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

中的示例