我有这个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得到一个名为" data_DB"的表中包含的一些对象。在我的postgresql服务器上。
我不能得到的是,对于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
答案 0 :(得分:2)
在Python 3中,您应该使用 select * from sysobjects where xtype = 'TR'
而不是__str__
来定义模型的字符串表示形式。请参阅models documentation。