0

我继承了一个经过重新设计的数据库,其中包括添加外键和唯一约束。因此,之前的测试对这些模型无效,我正在重写单元测试。

我的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

4

1 回答 1

0

AForeignKey是一个关系字段,会自动映射 id,因此您的模型应如下所示:

class Contracts(models.Model):
  parentorg = models.ForeignKey(Parentorgs)
  ...

关系是这样创建的:

 Contracts.objects.create(parentorg = self.parentOrg, ...)

这会将列设置parentorg_ididof self.parentOrg

关于代码的其他一些可能无关紧要的评论:

  • 模型类名称通常是单数的,即Contact代替Contracts,因为实例是一个契约。
  • 您不需要手动设置主键 - 除非您真的想控制主键的使用方式,否则parentorg_idin 字段Parentorgs是不必要的。
于 2013-06-12T02:03:57.323 回答