[英]Can't reference related many-to-many object in Django
這是我的模型:
class Vlan(models.Model):
Name = models.CharField(max_length=20)
VID = models.IntegerField(default=1)
def __str__(self):
return(str(self.VID) + ' ' + self.Name)
class Connection(models.Model):
Description = models.CharField(max_length=80)
Created = models.DateTimeField('Created Date')
Change_Order = models.CharField(max_length=40)
Implemented_by = models.CharField(max_length=80)
def __str__(self):
return(self.Description)
class Port(models.Model):
Port_Number = models.IntegerField(default=1)
Is_Pri = models.BooleanField(default=True)
Switch = models.ForeignKey(Switch, on_delete=models.CASCADE)
Connection = models.ForeignKey(Connection, null=True, blank=True, on_delete=models.SET_NULL)
Vlans = models.ManyToManyField(Vlan, blank=True)
def __str__(self):
return(str(self.Port_Number))
每個連接可以有一個或多個端口,每個端口可以有一個或多個 vlan(一個 vlan 可以在一個或多個端口上)。
我正在嘗試創建要在模板中呈現的字典列表。 每個字典都包含一個端口對象列表。 每個端口對象都包含一個包含 VLAN 對象的字典列表。
但是給定一個端口對象,我無法查詢一組 vlan:
這是代碼:
def connlist(request, Conn_id):
clist = Connection.objects.all()
ctx_list = []
ports =[]
for c in clist: # For each coonection
plist = c.port_set.all() # get a list of ports
for p in plist: # for each port
vlist = p.vlan_set.all() # get a set of vlans -- error!
portd = {'port': p, 'vlist':vlist}
ports.append(portd)
ctx= {'conn': c.Description , 'ports': ports}
ctx_list.append(ctx)
template = loader.get_template('newcon/connlist.html')
context = {'cons': ctx_list}
return HttpResponse(template.render(context, request))
線
vlist = p.vlan_set.all() # get a set of vlans -- error!
給出一個錯誤:
“端口”對象沒有屬性“vlan_set”
我不確定我是在向前還是向后引用 vlan。 我兩種方法都試過了,沒用。
p.vlan.all()
p.vlan_set.all()
任何幫助將不勝感激。
由於p
是Port
實例,因此您無需調用_set
。 你可以簡單地寫:
p.Vlans.all()
在這種情況下,您只是在Port
的字段中調用Vlans
,而不是Vlan
模型。 順便提一下,模型的字段都應該是小寫的。 干杯!
您將ManyToMany
關系命名為Vlans = models.ManyToManyField(Vlan, blank=True)
,這意味着您可以通過以下方式訪問相關的vlans
:
p.Vlans.all()
注意:通常一個類的屬性是用
lowercase_with_underscores
寫的,所以你應該把它改寫成vlans
,而不是。Vlans
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.