2013-06-12 151 views
0

我继承已进行了重新设计,其中包括增加外键和唯一约束的数据库。因此,之前的测试不适用于这些模型,我重写单元测试。Django模型和关系

我在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' 

如何创建用于在设置方法单元测试的对象?我试过

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错误。

我怎样才能创建一个parentOrgcontracts对象与此相应的关系?

回答

0

一个ForeignKey是有关系的领域,将自动映射的ID,所以你的模型应该是这样的:

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

而且关系创建像这样:

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

这将设置列parentorg_idself.parentOrgid

一对夫妇的有关代码等,也许无关紧要,评论:

  • 型号的类名通常是单数,即Contact代替Contracts,因为一个实例是一个合同。
  • 你不需要手动设置主要是关键 - 除非你真的想控制主键的使用方式,在Parentorgsparentorg_id领域是不必要的。