【问题标题】:access foreign key via a manytomany relationship in django通过 django 中的多对多关系访问外键
【发布时间】: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_setr 已经是一个角色,并且与名称具有反向关系。
  • 好的,你是对的,现在它可以工作了

标签: django foreign-keys many-to-many


【解决方案1】:

这里是感兴趣的人的解决方案。 (感谢丹尼尔·罗斯曼)。遍历每个关系。这里第一个关系是多对多,第二个是多对一:

{% 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 %}

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 2016-04-18
    • 2015-02-15
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多