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.
中的示例
我有这个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.