您的位置:首页 > 编程语言 > Go语言

Django rest framework 常用外键命令 (加入、删除、查看所有、查看除了自己以外的所有、摘除分离对象间外键关系)

2016-03-20 12:27 901 查看
依次介绍:加入、删除、查看所有、查看除了自己以外的所有、摘除分离对象间外键关系

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类似的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: