首页 > 解决方案 > 创建选择字段时出错

问题描述

我正在创建一个选择字段,但没有在模板上显示我的下拉菜单:

我的模型:

Inactive = 0
Active = 1

state_choices = (
    (Inactive, 'Inactive'),
    (Active, 'Active')
)
class Tipe(models.Model):

    name = models.CharField(max_length=50)
    details = models.CharField(max_length=100)
    state = models.CharField(
        max_length=1,
        choices=state_choices,
        default=Active,
    )

class People(models.Model):

    name=models.CharField(max_length=100)
    phone=models.CharField(max_length=9, null=True)
    state = models.CharField(
        max_length=1,
        choices=state_choices,
        default=Active,
    )
    tipe = models.ForeignKey(Tipe, on_delete=models.CASCADE, null=True)

表格.py:

class PeopleForm(forms.Form):

    name = forms.CharField(max_length=100)
    name.widget.attrs.update({'class':'form-control', 'required': 'true' })


    phone = forms.CharField(max_length=9)
    phone.widget.attrs.update({'class':'form-control', 'minlength':'9'})

    optionState = (('1', 'Active'),('0', 'Inactive'),)
    state = forms.ChoiceField(choices=optionState )
    state.widget.attrs.update({'class':'form-control', 'required':'true'})

    tipe = forms.ModelChoiceField(queryset=Tipe.objects.filter(state=1), widget=forms.Select)

这返回我的模板类型:

<select id="id_tipe" name="tipe">
<option value="" selected="selected">---------</option>
<option value="1">Tipe object</option>
<option value="3">Tipe object</option>
</select>

不要在我的下拉列表中显示值只显示 Tipe 对象不显示 Tipes 模型的名称。请任何建议..谢谢!

标签: mysqldjango

解决方案


好吧,您从未指定应如何Tipe打印对象,因此 Python/Django 使用此类模型的默认字符串表示。通常这'Tipe model (123)'123对象的主键有关。

通过覆盖该__str__函数,您可以定义一种自定义方式来呈现您的对象。例如,您可以使用如下.name属性:

class Tipe(models.Model):

    name = models.CharField(max_length=50)
    details = models.CharField(max_length=100)
    state = models.CharField(
        max_length=1,
        choices=state_choices,
        default=Active,
    )

    def __str__(self):
        return self.name

如果需要,您当然可以定义更复杂的东西,关键是您定义了一种方法来表示下拉列表中的对象以及在模板中显示对象的其他实例。

尽管这与问题无关,但我建议您将IntegerFields 用于您的state字段,因为0它是整数,而不是字符(或字符串),因此更接近用于表示状态的值类型.


推荐阅读