Django rest framework 常用外键命令 (加入、删除、查看所有、查看除了自己以外的所有、摘除分离对象间外键关系)
2016-03-20 12:27
901 查看
依次介绍:加入、删除、查看所有、查看除了自己以外的所有、摘除分离对象间外键关系
model
related_name表示其外键反向检索时用的字段名,默认为 小写的外键model名_set。
on_delete代表当user在检测到其所属team被删除时执行的操作,SET_NULL只在其外键设置了null=True属性时可用。
定义一个Team类的object team,
在team中新加一个队员user:
将一个队员user_been_quit从其所属的team中踢出:
一个队员查看其所在team中所有队员的信息:
其中user.team表示获取当前user所在队的object,再使用user.team .users (users为外键的realted_name)来反向查询以获取user所在队的所有user。
队长查看除了自己所有人的信息:
exclude和filter的作用相反,表示反选,也可以理解为filter(username!=user.username),但是不能这样写。
以上使用的team.users的类型为releted_manager,其拥有add、create、remove、clear、set等方法,其中clear方法可以实现摘除(解除)两个model_object的外键关系,并使得原先的object不被删除,原话是:clear()
但是我没能实现这个,所以使用
既在需要分离对象之间的外键关系时直接使用related_manage的remove方法来删除这个user,但是user的model中设置了on_delete=models.SET_NULL方法来保护user不会真正的被删除,只是将其外键关系置为空来实现外键关系的分离,以此来实现和clear类似的效果。
model
class MyUser(AbstractUser): team=models.ForeignKey('myteam.Team',related_name='users',null=True,on_delete=models.SET_NULL) #所属球队
related_name表示其外键反向检索时用的字段名,默认为 小写的外键model名_set。
on_delete代表当user在检测到其所属team被删除时执行的操作,SET_NULL只在其外键设置了null=True属性时可用。
定义一个Team类的object team,
在team中新加一个队员user:
team.users.add(user)
将一个队员user_been_quit从其所属的team中踢出:
team.users.remove(user_been_quit)
一个队员查看其所在team中所有队员的信息:
其中user.team表示获取当前user所在队的object,再使用user.team .users (users为外键的realted_name)来反向查询以获取user所在队的所有user。
serializers = MyUserPublicSerializer(user.team.users,many=True) return Response(serializers.data,status=status.HTTP_200_OK)
队长查看除了自己所有人的信息:
exclude和filter的作用相反,表示反选,也可以理解为filter(username!=user.username),但是不能这样写。
queryset = team.users.exclude(username=user.username) serializers = MyUserPublicSerializer(queryset,many=True) return Response(serializers.data,status=status.HTTP_200_OK)
以上使用的team.users的类型为releted_manager,其拥有add、create、remove、clear、set等方法,其中clear方法可以实现摘除(解除)两个model_object的外键关系,并使得原先的object不被删除,原话是:clear()
Removes all objects from the related object set: >>> b = Blog.objects.get(id=1) >>> b.entry_set.clear() Note this doesn’t delete the related objects – it just disassociates(分离) them.
但是我没能实现这个,所以使用
user.team.users.remove(user_been_quit) team = models.ForeignKey('myteam.Team',related_name='users',null=True,on_delete=models.SET_NULL) 注意:on_delete=models.SET_NULL
既在需要分离对象之间的外键关系时直接使用related_manage的remove方法来删除这个user,但是user的model中设置了on_delete=models.SET_NULL方法来保护user不会真正的被删除,只是将其外键关系置为空来实现外键关系的分离,以此来实现和clear类似的效果。
相关文章推荐
- Category(类别)和扩展(Extension)的区别
- 后缀树系列一:概念以及实现原理( the Ukkonen algorithm)
- GO1.6语言学习笔记3-工具篇(SublimeText 3+GoSublime组合)
- 编写GO的WEB开发框架 (十四): daemon和greaceful
- Mongoose 学习
- LightOJ1030 Discovering Gold(概率DP)
- CF 653E(Bear and Forgotten Tree 2-链表优化搜索)
- GDCPC GO
- Django 模型
- 商业书籍精华摘要《专注》丹尼尔·戈尔曼 Focus by Daniel·Goleman
- 命令行调试Django的Template功能时碰到的问题及解决方案
- codeforces-Good Bye 2015-New Year and Domino
- 来自bit.ly的1.usa.gov数据
- Go 实现lamda、匿名函数和内联函数
- Go 多态功能实现
- 英文歌曲:God is a girl(上帝是女孩)
- boost::algorithm
- ZOJ 2975 Kinds of Fuwas
- Recommended Django Project Layout
- 源码下修改开机动画及开机logo