我继承了一个经过重新设计的数据库,其中包括添加外键和唯一约束。因此,之前的测试对这些模型无效,我正在重写单元测试。
我的models.py
文件中有两个类:
class Parentorgs(models.Model):
parentorg_id = models.IntegerField(primary_key=True)
parentorg = models.CharField(max_length=100L, db_column='ParentOrg', unique = True)
eff_date = models.DateField()
exp_date = models.DateField(null=True, blank=True)
class Meta:
db_table = 'txn_parentorgs'
class Contracts(models.Model):
parentorg_id = models.ForeignKey(Parentorgs)
contractnum = models.CharField(max_length=10L, db_column='ContractNum', primary_key = True)
eff_date = models.DateField()
exp_date = models.DateField(null=True, blank=True)
contractname = models.CharField(max_length=100L, db_column='ContractName') # Field name made lowercase.
class Meta:
db_table = 'txn_contracts'
如何在setup方法中创建用于单元测试的对象?我试过了
self.parentOrg = Parentorgs.objects.create(parentorg_id = 300,
parentorg = "TestParentOrgOne", eff_date = timezone.now(), exp_date = None)
self.contracts = Contracts.objects.create(parentorg_id = self.parentOrg,
contractnum = "1234", eff_date = timezone.now(), exp_date = None,
contractname = "testContractName")
这在创建contracts
对象时出错,因为我收到unknown column 'parentorg_id_id' in field list
错误。
如何在此处创建具有适当关系的parentOrg
和contracts
个对象?
答案 0 :(得分:0)
ForeignKey
是一个关系字段,会自动映射ID,因此您的模型应如下所示:
class Contracts(models.Model):
parentorg = models.ForeignKey(Parentorgs)
...
这种关系是这样创造的:
Contracts.objects.create(parentorg = self.parentOrg, ...)
这会将列parentorg_id
设置为id
的{{1}}。
关于代码的其他一些(可能是不相关的)评论:
self.parentOrg
而不是Contact
,因为实例是一个合同。Contracts
中的parentorg_id
字段是不必要的。