django models反向关联related_name详解

标签:,
来源: WordPress导航主题
日期: 2022-9-6
作者: WordPress导航主题

先上表结构 models.py 代码如下

class PeojectUser(models.Model):     # 项目参与者     user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)     project = models.ForeignKey(to='Project',on_delete=models.CASCADE)     star = models.BooleanField(default=False)     invitee = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)     create_datetime = models.DateTimeField(auto_now_add=True)

django 执行 makemigrations 的时候,如果出现下面这种错误

SystemCheckError: System check identified some issues:  ERRORS: web.PeojectUser.invitee: (fields.E304) Reverse accessor for 'PeojectUser.invitee' clashes with reverse accessor for 'PeojectUser.user'.         HINT: Add or change a related_name argument to the definition for 'PeojectUser.invitee' or 'PeojectUser.user'. web.PeojectUser.user: (fields.E304) Reverse accessor for 'PeojectUser.user' clashes with reverse accessor for 'PeojectUser.invitee'.         HINT: Add or change a related_name argument to the definition for 'PeojectUser.user' or 'PeojectUser.invitee'.

这个问题出现的原因很简单,就是因为我们我们在PeojectUser 项目中有2个字段都进行了一对多的引用了UserInfo 表,这样会给后面进行反向查询的时候,造成django无法处理,因此提示是说我们是需要指定related_name
先说一个常规的问题:
正常我们的操作:

obj = UserInfo.objects.get(id=1) obj.projectuser_set.all()

但是由于我们在PeojectUser设置了2个关联,因此在我们后续执行的时候,django不知道需要反向关联那个字段了。所以提示我们添加 related_name 字段
针对上面的例子,我们做一下修改:

```python class PeojectUser(models.Model):     # 项目参与者     user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE,related_name='a')     project = models.ForeignKey(to='Project',on_delete=models.CASCADE)     star = models.BooleanField(default=False)     invitee = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE,related_name='b')     create_datetime = models.DateTimeField(auto_now_add=True)

那么在设置了上面的格式后,如果要进行不同的反向关联,则就可以 使用如下方式:

obj = UserInfo.objects.get(id=1) obj.a.all() obj.b.all()

腾讯云限时秒杀【点击购买】

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

django models反向关联related_name详解

`微信`扫码 加好友

链接到文章: https://gkxyz.com/django-modelsfanxiangguanlianrelated_namexiangjie.html

推荐站点

  • DigitalOcean – The developer cloud

    Helping millions of developers easily build, test, mana […]

  • Akamai(Linode)

    Deploy more with Linux virtual machines, global infrast […]

  • 阿里云-为了无法计算的价值

    阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云 […]

  • 懂车帝 – 说真的还得懂车帝

    懂车帝是一个汽车资讯平台,懂车更懂你。懂车帝资讯平台会聪明地分析你的兴趣爱好,自动为你推荐喜欢的汽车内容,提供 […]

  • RAKsmart

    主机商介绍:RAKsmart是知名的美国服务器租用商,包括美国站群服务器、美国cn2服务器、香港服务器等热门产 […]

  • 芒果TV-天生青春

    芒果TV-大家都在看的在线视频网站-热门综艺最新电影电视剧在线观看

评论已关闭