“模型表单”下拉列表(选择)字段未显示正确的行以供选择

时间:2017-12-09 03:02:00

标签: django html-select modelform

我有Parent Model使用指向Foreign Key的{​​{1}}。在这种情况下,“儿童模型”被称为Mstrgensalutationtype(实际上是Salutations)。

Child Model用于创建Parent Model

基本上,下面是我在尝试选择称呼类型时得到的结果。

enter image description here

我需要看到的是

Model Form

问题:我在这里做错了什么?

TIA

models.py - 用作子模型

Mr.
Ms.
Mrs.
Prof.
Dr.

models.py - 用作父模型

class Mstrgensalutationtype(models.Model):
    saltypeid = models.BigIntegerField(primary_key=True)
    lang = models.CharField(max_length=2, blank=True, null=True)
    shortval = models.CharField(max_length=7, blank=True, null=True)
    salutationlong = models.CharField(max_length=20, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'MstrGenSalutationType'

        def __unicode__(self):
            return u'%s ' % ( self.shortval )

更新

我在下面做了以下更改 - 但仍然遇到了同样的问题。

class Mstrstorehead(models.Model):
    tenantid = models.BigIntegerField(primary_key=True)
    extrefacctno = models.CharField(max_length=20, blank=True, null=True, verbose_name="Account Reference No")

[... snip ...]

    contactsalutationid = models.ForeignKey(Mstrgensalutationtype,  models.DO_NOTHING, db_column='contactsalutationid', blank=True, null=True, verbose_name="Salutation")

[... snip ...]


    class Meta:
        managed = False
        db_table = 'MstrStoreHead'

1 个答案:

答案 0 :(得分:2)

__unicode__方法仅在Python 2中有效 - it doesn't do anything in Python 3。您需要使用__str__代替:

def __str__(self):
    return self.shortval

另请注意,{3}中的u字符串前缀是多余的。默认情况下,所有字符串都是unicode。

如果您需要同时支持Python 2和3,请使用上面链接中所述的python_2_unicode_compatible