Skip to main content
 首页 » 编程设计

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

2024年10月24日2798°冷暖

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