django7 models 高级应用

===================models 中 related_name   的用法:

class A():

  title=models.CharField()

  name=models.CharField()

class B():

  fk1=models.ForKeing(to='A',related_name='r1')

  fk2=models.ForKeing(to='A',related_name='r1')

 

当 以上这种情况   表B  有俩个 字段 都和 表A 关联 

表A 做反向查找的时候 就不能  

obj=models.A.objects.get(id=1)

obj.B_set.all()  

以为无法确定是 B的哪个FK

但是 用related_name  就可以确认出来 

B.r1.all()

B.r2.all()

***************************************through_fields 

class A():

  title=models.CharField()

  name=models.CharField()

class B():

user=models.CharField()

  fk1=models.ForKeing(to='A',related_name='r1')

  fk2=models.ForKeing(to='A',related_name='r1')

like=models.ManyToMany(to='B',throuogh='Like',through_fields=('user','name'))

class Like():
user=models.ForeignKey(to='B')
name=models.ForeignKey(to='A')
ctime=models.DataTimeField()

在多对多的情况下:
ManyToMany字段 默认 会生成第三张表,但是 只有3个ID,如果再想加其他字段
需要自己创建第三张表,然后 通过参数关联
models.ManyToMany(to='B',throuogh='Like',hrough_fields=('user','name'))

其中 through_fields 代表第三张表 关联的俩个字字段,而第一个值必须是 第三张表关联自己(B表)的字段,
第二个值是第三张表中关联另外一张表(A表)的值

-------------------------------------------------------联合唯一索引

class A():

  title=models.CharField()

  name=models.CharField()

class B():

user=models.CharField()

  fk1=models.ForKeing(to='A',related_name='r1')

  fk2=models.ForKeing(to='A',related_name='r1')

like=models.ManyToMany(to='B',throuogh='Like',through_fields=('user','name'))

class Like():
user=models.ForeignKey(to='B')
name=models.ForeignKey(to='A')
ctime=models.DataTimeField()

class Meta:
unique_together = [
('user', 'name'),
]

user和 name  联合唯一索引

 

===============================

 

posted @ 2017-09-27 16:04  昂达达  阅读(286)  评论(0编辑  收藏  举报