【发布时间】:2019-07-01 21:47:24
【问题描述】:
我有一个外键,它又是一个多对多关系,如下所示:
人员角色(多对一)->名称
型号:
class Person(models.Model):
mail=models.EmailField()
firstName=models.CharField(max_length=200)
lastName=models.CharField(max_length=200)
phoneNumber=PhoneNumberField()
streetAdress=models.CharField(max_length=200)
zipcode=models.CharField(max_length=200)
city=models.CharField(max_length=200,default="Göteborg")
country=models.CharField(max_length=200,default="Sweden")
def __str__(self):
return "%s %s" % (self.firstName,self.lastName)
class Meta:
ordering = ('firstName','lastName')
class Role(models.Model):
role=models.CharField(max_length=200)
person=models.ManyToManyField(Person)
def __str__(self):
return self.role
class Meta:
ordering = ('role',)
class Name(models.Model):
name=models.CharField(max_length=200)
role=models.ForeignKey(Role,on_delete=models.CASCADE)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
class Address(models.Model):
我可以从人员和角色访问 manyTomany 字段,但我无法访问名称。
模板:
{% extends "artdb/base.html" %}
{% block content1 %}
<ul>
{% for p in ans %}
<h5>First name: {{p.firstName}}</h5>
<h5>Last name: {{p.lastName}}</h5>
<h5>Phone: {{p.phoneNumber}}</h5>
<h5>Adress: {{p.streetAdress}}</h5>
<h5>Zip Code: {{p.zipcode}}</h5>
<h5>City: {{p.city}}</h5>
<hr>
{% endfor %}
</ul>
{% endblock content1 %}
{% block content2 %}
<ul>
{% for p in ans %}
{% for r in p.role_set.all %}
<h5>{{ r.role }}</h5>
{% endfor %}
{% endfor %}
<hr>
</ul>
{% endblock content2 %}
{% block content3 %}
<ul>
{% for p in ans %}
{% for r in p.role_set.all %}
<h5>{{ r.name }}</h5>
{% endfor %}
{% endfor %}
<hr>
</ul>
{% endblock content3 %
我知道我必须迭代才能获得 manyTomany,但 oneTomany 是否也一样? 如何通过 Role 访问 Persons 的 Names?
}
【问题讨论】:
-
但肯定是一样的吧?您遍历 role_set 以获得到达角色,因此对于每个角色,您必须遍历 name_set 以获得每个名称,不是吗?
-
不,
{{r.role_set.all}}
什么也没提供。 -
不,是
name_set,而不是role_set。r已经是一个角色,并且与名称具有反向关系。 -
好的,你是对的,现在它可以工作了
标签: django foreign-keys many-to-many