多对多字段的对称属性

这个字段设置后,可以防止反查。如何防止反查,不设这个字段添加一条关系会产生两条记录,相当于添加单向邻区关系,得到双向邻区关系,因为存在双向的邻区关系,即可以正向查找,也可以反向查找。

加了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.

 

https://docs.djangoproject.com/en/2.1/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值