一对多选项未出现在“模型表单” Django中

时间:2018-12-07 23:55:54

标签: python django django-forms modelform

我是Django的新手,正在努力弄清我在Django Model Form中缺少的内容。我想在表单中显示一个带有预定义值的下拉列表,但是由于某些原因,这些选项从不出现。以下是来自models.py

的代码
LOAN_STATUS = (
    ('m', 'Maintenance'),
    ('o', 'On loan'),
    ('a', 'Available'),
    ('r', 'Reserved'),
)

class Status (models.Model):
    status = models.CharField(
            max_length=50,
            choices=LOAN_STATUS,
            blank=True,
            default='m',
        )
    class Meta:
        db_table = 'Status'

class Property(models.Model):
   propertyID = models.AutoField(primary_key=True)
   status = models.ForeignKey(Status, on_delete=models.SET_NULL, null=True)

   def __str__(self):
      return self.propertyTitle

以下是来自ModelForm的代码

class CreateAdvertisementForm(ModelForm):
    class Meta:
        model = Property
        exclude = ['propertyID']
        fields = ('status',)

以下是我的模板中的代码

{% block body %}
<form method="POST" class="post-form">
    {% csrf_token %}
    {{ form.as_p }}

    <button type="submit" class="save btn btn-default">Save</button>
</form>{% endblock %}

请帮助我了解问题所在。

enter image description here

3 个答案:

答案 0 :(得分:0)

尝试像这样指定模型字段,而不是在Meta下:

class Status (models.Model):
    status = models.CharField(
                max_length=50,
                choices=LOAN_STATUS,
                blank=True,
                default='m',
            )
    class Meta:
        db_table = 'Status'

,然后将max_length增加到大于LOAN_STATUS选项中最长单词的字符数的数字。我认为您拥有它的方式会出现问题,因为max_length为1个字符,但是您所有的选择都超过了1个字符。也许因为选择显示有1个字符,所以它可以工作,但是我很确定它将检查第二个值。

此外,我总是在表单中指定字段值:

class CreateAdvertisementForm(ModelForm):
    class Meta:
        model = Property
        fields = ('status',)

这可以准确地告诉您要渲染的字段。由于您的模型中只有1个字段,因此这似乎有些过头了,这应该是显而易见的,但是出于安全原因,我认为这是最佳做法。也许其他人可以对此提供意见。

答案 1 :(得分:0)

尝试刷新数据库,

python manage.py migrate --run-syncdb

然后进行迁移并迁移

python manage.py makrmigrations
python manage.py migrate

答案 2 :(得分:0)

经过一天的奋斗,我终于开始工作了。但是,我真的不确定我是否理解正确。我最终使用python控制台将值插入到数据库中。据我说,Django应该自动处理此问题,因为我已经在models.py中定义了所有可能的值。我在这里想念什么?