【发布时间】:2011-02-27 07:09:24
【问题描述】:
我在将 ForeignKey 默认为零时遇到问题,它一直告诉我该字段是必需的,或者如果我尝试不同的迭代,它会抱怨该字段不能为空。
我不确定我做错了什么,但如果 ForeignKey 为 null,我需要将其默认为零。
我正在尝试一个想法来持有几个不同实体(即:公司和员工、公司和赞助商等、公司和供应商等)之间的所有合同。
这些关系都在起作用,但是我的 ForeignKey 语句不允许我使用默认值 0(零)。
# relationships
# Only the company field should be required, the others are optional
# This is so you can link a company with either a sponsor OR a worker
#
sponsor = models.ForeignKey('Sponsor', null=True, default=0, blank=False)
company = models.ForeignKey('Company')
worker = models.ForeignKey('Worker', null=False, default=0, blank=False)
# possible future relationships (not implemented)
#suppliers = models.ForeignKey('Supplier', null=True, default=0, blank=False)
理想情况下,我希望只有公司字段是必需的,其他都是可选的,默认为零。
这个想法是有一个表来规则/管理不同实体之间的所有合同。
伪代码
合同; id = 1 |公司 ID = 1 |赞助商 ID = 0 | worker_id = 1 |长度 = 10 |工资 = 10000
// 等等
我已经尝试了以下迭代。
# models.ForeignKey('Sponsor', null=False, default=0, blank=True) # This makes the field required
# models.ForeignKey('Sponsor', null=True, default=0, blank=True) # This complains that "Contracts.sponsor" does not allow null values.
任何关于如何使 ForeignKey 使用默认值的指针将不胜感激。
非常感谢。
编辑。添加导致错误的代码;这是代码的精简版。
// company.py
class Company(models.Model):
"""(Company description)"""
sponsorContracts = models.ManyToManyField('Sponsor', through='Contracts', db_column='sponsor_id')
employees = models.ManyToManyField('Worker', through='Contracts', db_column='worker_id')
// contracts.py
class Contracts(models.Model):
"""(Contracts description)"""
# relationships
sponsor = models.ForeignKey('Sponsor', null=True, default=0, blank=True)
company = models.ForeignKey('Company')
worker = models.ForeignKey('Worker', null=False, default=0, blank=False)
// worker.py
class Worker(models.Model):
"""(A list of employees)"""
employer = models.ManyToManyField('Company', through='Contracts', db_column='company_id')
// sponsor.py
class Sponsor(models.Model):
"""(A list of sponsors)"""
sponsorContracts = models.ManyToManyField('Company', through='SponsorContracts')
【问题讨论】:
-
您收到的错误是什么,产生它的确切代码是什么?
-
"ValueError at /admin/myapp/contracts/add/ 无法分配无:"Contracts.sponsor" 不允许空值",另一个是:"IntegrityError at /admin/myapp/contracts /add/ myapp_contracts.sponsor_id 不能为 NULL"
-
添加了代码以在原始问题中为问题提供上下文。
标签: django foreign-keys default