django admin使用空值保存内联

时间:2011-11-20 20:15:00

标签: django django-models django-admin

我有两个模型

class Employer(models.Model):
..
..


class JobTitle(models.Model):
    type = models.IntegerField(null=False, choices=JobTitles.CHOICES,blank=True,default=0)
    employer = models.OneToOneField(Employer,unique=True,null=False)  

我已为Employer定义了管理员,并将JobTitle定义为内联类。

但是,当我保存Employer对象而未选择JobTitle时,由于invalid literal for int() with base 10: ''的{​​{1}}字段,它会引发错误type

我想将JobTitle设置为0,因为我定义了默认值= 0,如果我在保存雇主时没有选择任何作业标题。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

所以,我从您发布的代码中推断出这一点,但我认为您在这里混合策略。我假设你基于你构建问题的方式,你希望我能够创造一个没有类型的职位。或者,您希望一种作业类型成为默认选择。我进一步推断,虽然现在我伸展了一点,但你有一个习惯" No Type"选择(您没有向我们展示您的JobTitles.CHOICES元组,所以我必须猜测),这与您已设置为默认值的0值相对应。

如果您想拥有默认的工作类型(即使您正在调用它"没有工作类型"或类似的东西),那么您应该使用default关键字进行设置参数(如你所做)你应该设置null=Falseblank=False(或者,省略两者,因为这些是默认值)。

但是,如果您希望可能存在没有类型的作业标题,那么除非您在实现中有某些原因要做其他事情,否则在数据中表示此作用的最纯粹方法是使用{{ 1}} SQL值。如果您想要走这条路线,正确的方法是设置null blank=True,然后设置null=True或省略该关键字参数完全。

这应该让你找到你所寻求的行为。

答案 1 :(得分:0)

对于Model个参数,当Django将数据保存到数据库时使用default ...

另一方面,在数据解析期间发生错误。提交表单时,如果需要,django会将数据解析为相关类型。提交html表单后,django会收到像

这样的字符串数据
{'title':'12', 'employer_id':'23'...}

所以,django必须先将类型解析为ineger,然后才能将其保存到数据库中...因为你的表单发送了空字符串''int('')只是因为TypeError而失败。

您必须做的是删除blank=True。或者以某种方式,您必须覆盖组合框默认值的默认行为,并将其设置为 0 ,而不是''