这个字段设置后,可以防止反查。如何防止反查,不设这个字段添加一条关系会产生两条记录,相当于添加单向邻区关系,得到双向邻区关系,因为存在双向的邻区关系,即可以正向查找,也可以反向查找。
加了symmetrical=False后,增加一条多对多关系,在多对多关系表中只会对应增加一条数据,就无法反向查找了。
经过验证,实际情况也是这样的,截图如下:
symmetrical=False时,添加一条多对多关系,只会产生一条记录,相当于只添加了正向邻区,不添加反向邻区;
symmetrical=True时,添加一条多对多关系,会产生两条记录,相当于同时添加正向邻区和反向邻区。
adj = models.ManyToManyField("self", symmetrical=False)
注意看下图中多对多关系表中的字段,id,from_zjcell_id, to_zjcell_id,很清楚的标明了从哪个小区到哪个小区。from和to表明多对多关系是有指向的。所以说当symmetrical=False时,只增加从A到B的多对多关系,不会同时产生从B到A的多对多关系。
# 浙江新建站小区对象
class ZJcell(models.Model):
cgi = models.CharField(max_length=100, default=None, unique=True)
eci = models.CharField(max_length=100, default=None, null=True)
cellname = models.CharField(max_length=100, default=None)
# 频段,如F1,F2,D1,D2,D3
freq = models.CharField(max_length=100, default=None)
pci = models.IntegerField()
lnglat = models.ForeignKey(LngLat, on_delete=models.CASCADE, default=None)
# 天线方位角
azimuth = models.IntegerField()
# 模3值
m3 = models.IntegerField(null=True)
# 邻区关系,相当于单向邻区,虽然可以反向查找,但不是双向邻区。
# symmetrical=True表示对称,加了正向,反向自动添加
adj = models.ManyToManyField("self", symmetrical=False)
enb = models.ForeignKey(ZJenb, on_delete=models.CASCADE, default=None, null=True)
def __str__(self):
return self.cellname
symmetrical | 英 [sɪˈmetrɪkl] | 美 [sɪˈmɛtrɪkəl] |
adj. | 对称的,匀称的; |
[例句]The two wings of the building are exactly symmetrical.
大楼的两翼完全对称。
ManyToManyField.
symmetrical
¶
Only used in the definition of ManyToManyFields on self. Consider the following model:
from django.db import models
class Person(models.Model):
friends = models.ManyToManyField("self")
When Django processes this model, it identifies that it has a ManyToManyField
on itself, and as a result, it doesn’t add a person_set
attribute to the Person
class. Instead, the ManyToManyField
is assumed to be symmetrical – that is, if I am your friend, then you are my friend.
If you do not want symmetry in many-to-many relationships with self
, set symmetrical
to False
. This will force Django to add the descriptor for the reverse relationship, allowing ManyToManyField
relationships to be non-symmetrical.