我有这个模型.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”的表中的对象。
我没有得到的是,对于 b,crispy 应该生成一个列表框,其中包含我的 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
请您参考如下方法:
在 Python 3 中,您应该使用 __str__ 而不是 __unicode__ 来定义模型的字符串表示形式。请参阅 models documentation 中的示例.
