django進階
阿新 • • 發佈:2017-05-15
set django any rim 無法 div key ddr 列表
多對多:
創建多對多:
方式一:自定義關系表
class Host(models.Model): nid=models.AutoField(primary_key=True) hostname=models.CharField(max_length=32,db_index=True) ip=models.GenericIPAddressField(db_index=True) port=models.IntegerField() b=models.ForeignKey(‘Business‘,to_field=‘id‘) #自定義關聯 class HostToApp(models.Model): hobj=models.ForeignKey(to=‘Host‘,to_fields=‘nid‘) aobj=models.ForeignKey(to=‘Application‘,to_fields=‘id‘)
對表的操作和foreignkey一樣,並且可以直接對這個表進行操作
HostToApp.objects.create(hobj_id=1,aobj_id=2)
方式二:自動創建關系表
1 class Host(models.Model): 2 nid=models.AutoField(primary_key=True) 3 hostname=models.CharField(max_length=32,db_index=True) 4 ip=models.GenericIPAddressField(db_index=True) 5 port=models.IntegerField() 6 b=models.ForeignKey(‘Business‘,to_field=‘id‘) 7 8 class Application(models.Model): 9 name=models.CharField(max_length=64) 10 auto=models.ManyToManyField("Host")
缺點就是無法直接對第三張表進行操作,只能間接的方式來操作並且也無法在這個表增加多余字段
#現獲取對象
obj = Application.objects.get(id=1)
# 然後間接操作第三張表中的內容
#增加
obj.r.add(1)#Application=1 host=1 obj中已經存在了app id 所以這裏的add=1就是host表中的id
obj.r.add(2)#Application=1 host=2
obj.r.add(2,3,4)#Application=1 host=2/3/4
obj.r.add(*[1,2,3,4])
#移除
obj.r.remove(1)
obj.r.remove(2,4)
obj.r.remove(*[1,2,3])
#清空obj中的app id =1的所有內容
obj.r.clear()
#更新
obj.r.set([3,5,7])
# 所有相關的主機對象“列表” QuerySet
obj.r.all()
增刪改查例子
def app(reques): obj=models.Application.objects.all() print(obj) for i in obj: #查詢 print(i.name,i.auto.all()) #增加app項目並且返回這個obj對象 #obj=models.Application.objects.create(name=‘oracle‘) #增加1,3,4host到app #obj.auto.add(*[1,4,3]) #刪除 # obj=models.Application.objects.get(id=1) # obj.auto.remove(1) # return render(reques,‘app.html‘,{‘obj‘:obj}) return HttpResponse("ok")
django進階