django 的ORM
?
class UserType(models.Model):
??? caption = models.CharField(max_length=32)
class UserInfo(models.Model):
??? user_type = models.ForeignKey(UserType)# user_type對象中封裝id,caption
??? username = models.CharField(max_length=32)
?
?
Select | insert | |||
一對多 | django | 正向 | 1.Models.userinfo.objects.filter(user_type__caption=xxx) ?用戶類型為xxx的用記 2.?models.UserInfo.objects.select_related().all() 兩個表做join | 1.models.UserInfo.objects.create(username=’xx’,user_type_id=n) 2.models.UserInfo.objects.create(username=’xx’, ? user_type=models.UserType.objects.get(caption=’xx’),age=m) |
反向 | 1.?obj=?models.UserType.objects.all() 2.obj=models.UserType.objects.filter(userinfo__age__gt=33) usertype創建后會對應的創建一個與子表名(userinfo)對應的列 userinfo指向子表 3.?obj=models.UserType.objects.get(caption='ceo').userinfo_set.all()? | ---- | ||
前端 | 正向 | 1.?? obj.user_name ?obj.user_type.caption 2.?? 與1 一樣 | ----- | |
反向 | 1.obj.caption? obj.userinfo_set.first.username 2. 與 1 一樣 3.obj.username or obj.age | ------ | ||
? ? ? ??????? class Host(models.Model): ??? ???????????????? hostname = models.CharField(max_length=32) ????????????????? class HostAdmin(models.Model): ??? ???????????????? username = models.CharField(max_length=32) ??? ???????????????? host = models.ManyToManyField(Host) ? ? | ||||
多對多 | django | 正向 | 1.models.HostAdmin.objects.filter(host__hostname='host1').values() ?管理host1的所有用戶 2.admin_obj=models.HostAdmin.objects.filter(host__hostname__in=('host1','host2')).values().distinct()?管理host1 或 host2的所有用戶 ? | 1.admin_obj = models.HostAdmin.objects.get(username='user1') host_obj_list = models.Host.objects.filter(id__lt=3) admin_obj.host.add(*host_obj_list) ?--因為host_obj_list是多條,所以加 * 號 ? |
反向 | 1.?obj?=?models.Host.objects.get(id=3).hostadmin_set.all()Id=3的主機對應的管理員2.obj?=?models.Host.objects.filter(hostadmin__username='user1') ?管理員為user1 對應的主機 | 1. host_obj = models.Host.objects.get(id=3) ? admin_obj_list =models.HostAdmin.objects.filter(id__gt=1) ? host_obj.hostadmin_set.add(*admin_obj_list) ? | ||
前端 | 正向 | 1.admin.username 2. {% for admin in admin_obj %}?<p>{{ admin.username}}? ?{% for host in admin.host.all %}{{ host.hostname}}{% endfor %}此處的all可以改為values,但如果改成values_list,后面就需要改成host.1?(1為index值) ? | ------- | |
反向 | 1.obj.username 2.obj.hostname | ------------- | ||
注:1.表名_set只能跟在結果后面,不能跟在結果集后面
轉載于:https://blog.51cto.com/120662/1766949
總結
以上是生活随笔為你收集整理的django 的ORM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php sockent通信
- 下一篇: 秒杀设计--mysql的锁机制应用和re