Django模型和关系

2024-05-31 23:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的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错误。你知道吗

如何在这里创建具有适当关系的parentOrgcontracts对象?你知道吗


Tags: idtruedbdatemodelscolumnlengthmax
1条回答
网友
1楼 · 发布于 2024-05-31 23:27:34

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

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

这种关系是这样建立的:

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

这将把列parentorg_id设置为self.parentOrgid。你知道吗

关于代码的一些其他的,也许不相关的评论:

  • 模型类名通常是单数的,即Contact而不是Contracts,因为实例是一个契约。你知道吗
  • 您不需要手动设置主键—除非您真的想控制主键的使用方式,parentorg_id中的Parentorgs字段是不必要的。你知道吗

相关问题 更多 >