我有一个外键,而外键又具有如下所示的多对多关系:
人员<-M2M->角色(ManyToOne)->姓名
模型:
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一样吗? 如何通过角色从人员中访问姓名?
}
答案 0 :(得分:0)
这是那些有兴趣的人的解决方案。 (感谢Daniel Roseman)。遍历每个关系。在这里,第一个关系是多对多的,第二个关系是多对一的:
{% block content3 %}
<ul>
{% for p in ans %}
{% for r in p.role_set.all %}
{% for n in r.name_set.all %}
<h5>{{ n }}</h5>
{% endfor %}
{% endfor %}
{% endfor %}
<hr>
</ul>
{% endblock content3 %}