получить доступ к внешнему ключу через множество отношений в Django - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть внешний ключ, который, в свою очередь, имеет отношение многие ко многим, например:

Персоны <-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 %

Я знаю, что мне нужно выполнить итерациюполучить много Томаны, но то же самое ли с одним Томаном?как я могу получить доступ к Именам от Людей через Роль?

}

1 Ответ

0 голосов
/ 08 февраля 2019

вот решение для интересующихся.(спасибо Даниэль Роузман).Итерация через каждое отношение.Здесь первое отношение много ко многим, а второе много к одному:

{% 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...