Django ModalChoiceField将Integer作为默认值返回

时间:2012-04-20 04:01:16

标签: django django-models django-forms

如此新的python& django在一个项目上移动得很好,但无法找到上述问题的简单答案:

模型就像这样

class Projects(models.Model):
    project_name = models.CharField(max_length=200)
    project_description = models.TextField(blank=True)    
    active = models.BooleanField() 

    def __unicode__(self):
        return self.project_name

我有其他模型将上述内容称为ForignKey,如

class Estimates(models.Model):
    client = models.ForeignKey(Clients)
    estimate_summary = models.CharField(max_length=200,blank=True)
    project = models.ForeignKey(Projects,default=-1,blank=True)

我知道我可以设置blank=False以确保我得到一个有效的选择,但我想允许他们选择不将项目分配给估计,在这种情况下我会存储一个默认的整数-1什么的。

然而问题是我无法弄清楚如何让表单使用整数作为其默认值而不是“”< - (空字符串)

<option selected="selected" value="">---------</option>
<option value="1">Sample Project</option>

我看到的所有问题和答案都围绕着将---------更改为其他文本或强制您一起删除空白选项。我只想要

<option selected="selected" value="-1">---------</option>

所以我的表格将验证

写完问题后,我想知道我是否可以自己插入一个选项,并在添加到表单时使用empty_label=None

field2 = forms.ModelChoiceField(queryset=..., empty_label=None)

1 个答案:

答案 0 :(得分:1)

首先,您不希望使用-1的整数作为默认值。对于ForeignKeys,你通常使用null = True和blank = True如果你不需要它(不要忘记删除并重新创建表或使用south来迁移它 - 也删除默认值,因为None是一个有效的选项使用null = True,因此不需要默认值)。这样,如果你没有分配一个项目,你将在数据库中获得NULL,这也是Admin支持的 - -1将比它解决的更多。

一旦使用null = True,blank = True ModelChoiceField将自动按您的意愿工作。