我有两个模型
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,如果我在保存雇主时没有选择任何作业标题。
我怎样才能做到这一点?
答案 0 :(得分:0)
所以,我从您发布的代码中推断出这一点,但我认为您在这里混合策略。我假设你基于你构建问题的方式,你希望我能够创造一个没有类型的职位。或者,您希望一种作业类型成为默认选择。我进一步推断,虽然现在我伸展了一点,但你有一个习惯" No Type"选择(您没有向我们展示您的JobTitles.CHOICES
元组,所以我必须猜测),这与您已设置为默认值的0
值相对应。
如果您想拥有默认的工作类型(即使您正在调用它"没有工作类型"或类似的东西),那么您应该使用default
关键字进行设置参数(如你所做)和你应该设置null=False
和blank=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 ,而不是''。