Django如何使ForeignKey使用默认值?

Django如何使ForeignKey使用默认值?,django,foreign-keys,default,Django,Foreign Keys,Default,我在将ForeignKey默认值设置为零时遇到问题,它会不断告诉我该字段是必需的,或者如果我尝试其他迭代,它会抱怨该字段不能为null 我不确定我做错了什么,但如果ForeignKey为null,我需要将其默认为零 我正在试验一个想法,即在几个不同的实体(即:公司和员工、公司和赞助商等、公司和供应商等)之间持有所有合同 这些关系都正常工作,但是我的ForeignKey语句不允许我使用默认值0(零) 理想情况下,我希望只需要company字段,其他字段完全是可选的,默认为零 其思想是有一个表来管理

我在将ForeignKey默认值设置为零时遇到问题,它会不断告诉我该字段是必需的,或者如果我尝试其他迭代,它会抱怨该字段不能为null

我不确定我做错了什么,但如果ForeignKey为null,我需要将其默认为零

我正在试验一个想法,即在几个不同的实体(即:公司和员工、公司和赞助商等、公司和供应商等)之间持有所有合同

这些关系都正常工作,但是我的ForeignKey语句不允许我使用默认值0(零)

理想情况下,我希望只需要company字段,其他字段完全是可选的,默认为零

其思想是有一个表来管理不同实体之间的所有合同

假代码

合同; id=1 |公司id=1 |赞助商id=0 |工人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')

ForeignKey如何默认为0?FK的全部要点是它被约束到另一个表中的键的值。该表中不能有ID为0的行,因此0不是FK的有效值


如果希望模型实例与其他几个表中的一个表有关系,则可能需要。

ForeignKey如何默认为0?FK的全部要点是它被约束到另一个表中的键的值。该表中不能有ID为0的行,因此0不是FK的有效值


如果希望模型实例与其他几个表中的一个表有关系,则可能需要。

实体之间的关系存在(对另一个表中id的有效引用),或者不存在(值未定义-null)。如果您确实“需要”一个不引用有效实体的非空值,您可以尝试在引用的表中定义一个“默认”实体,并将默认值定义为该实体

但是在大多数情况下,我会质疑要求非空默认FK值的有效性。虽然我在一两个案例中做过类似的事情:

User(id, username, gender_id)
Gender(id, value)

Gender:
id 1 value unknown
id 2 value male
id 3 value female

实际上,null被称为value undefined,在大多数情况下都应该这样使用。

实体之间的关系要么存在(另一个表中对id的有效引用),要么不存在(value undefined-null)。如果您确实“需要”一个不引用有效实体的非空值,您可以尝试在引用的表中定义一个“默认”实体,并将默认值定义为该实体

但是在大多数情况下,我会质疑要求非空默认FK值的有效性。虽然我在一两个案例中做过类似的事情:

User(id, username, gender_id)
Gender(id, value)

Gender:
id 1 value unknown
id 2 value male
id 3 value female

实际上,null被称为未定义值,在大多数情况下都应使用。

您收到的错误是什么,生成它的确切代码是什么?“/admin/myapp/contracts/add/Cannot assign None:“contracts.shandor”不允许空值”,另一个是:“IntegrityError at/admin/myapp/contracts/add/myapp_contracts.sandor_id可能不为NULL”添加了代码,为原始问题中的问题提供上下文。您收到的错误是什么,以及生成错误的确切代码是什么?/admin/myapp/contracts/add/处的ValueError无法分配空值:“contracts.sandor”不允许空值另一个是:“IntegrityError at/admin/myapp/contracts/add/myapp_contracts.shandor_id可能不为空”添加了代码,为原始问题中的问题提供了上下文。这只是我在玩的一个实验性想法。我有多个实体,每个实体都与一个公司实体签订了“合同”,但我想让一个实体控制合同会比让6个实体做同样的事情更容易。我将看一看一般关系这只是我玩的一个实验性想法。我有多个实体,每个实体都与一个公司实体签订了“合同”,但我想让一个实体控制合同会比让6个实体做同样的事情更容易。我将看一看泛型关系,您的意思是在用作默认实体的各个实体中添加一行(例如,行1=未知)?我觉得这很有道理。@zardon是的,我就是这个意思。但只有当您必须这样做,并且不能使用null表示“未知”。您的意思是在用作默认实体的各个实体内添加一行(例如,行1=未知)?我觉得这很有道理。@zardon是的,我就是这个意思。但前提是你必须这样做,而且不能用null来表示“未知”。