django 复合主键(composit primary key)

项目开发中,不是所有表都只有一个主键。如果只有一个主键的情况,django 很容易做,也很好做。
      在models.py 中定义 class 时,可以直接实现:
      比如:
      class Category(models.Model):
      catid = models.CharField(primary_key=True)
      但是,在很多表中,有多个字段作为主键,比如主从表的从表,通常就是多个字段组成的复合主键,但如果我们用上面类似的方式来做,在保存的时候可能会出错。比如如下方式:
      class Category(models.Model):
      catid = models.CharField(primary_key=True)
      bigcate = models.CharField(primary_key=True)
      .........
      这样做的话,在保存的时候,肯定会出错,正确的做法应该是 :

      程序代码

      class Category(models.Model):
      catid = models.CharField(max_length=50) #这里不设置主键了
      bigcate = models.CharField(max_length=50) #这里不设置主键了
      .........
      class Meta:
      db_table = 'my_category'
      unique_together = ("catid", "bigcate") #这是重点


      这样保存就可以这样了:

      程序代码

      cat=models.Category(catid='123',bigcat='234',......)
      cat.full_clean()
      cat.save()


      PS:这样做,在保存的时候,肯定是没有问题的,但后来我在测试 get,filter 方法时,还是会报错。说明这种方法,还是有点问题。总是说有id 没找到,其实这是 django 默认的 primary key 没有,看来还得继续找办法。有新方法继续更新。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值