Django таблицы - отношение столбцов к заполненным данным - PullRequest
0 голосов
/ 12 января 2020

Итак, у меня есть эти модели.

class Domains(models.Model):
    '''Domain listing for ISO'''
    domain_id = models.CharField(max_length=10)
    domain_title = models.TextField()

    def __str__(self):
        return self.domain_id
#sample data output would be 
id      title
A5      A5 title
A6      A6 title

class SubDomain(models.Model):
    '''Sub-domain listing for ISO. Relationship with Domain'''
    domain_key = models.ForeignKey(Domains, on_delete=models.CASCADE)
    subDomain_id = models.CharField(max_length=10)
    subDomain_title = models.TextField()
    subDomain_objective = models.TextField()

    def __str__(self):
        return self.subDomain_id
#sample data output would be 
id      title            objective
A5.1    A5.1 title       A5.1 objective
A6.1    A6.1 title       A6.1 objective

Мои представления в настоящее время являются простыми запросами, которые используют objects.all или objects.filter для сохранения списка в переменной. Эта точка зрения не полная, но я просто проверяю на этом этапе. Затем эта переменная зацикливается в моих шаблонных тегах так:

table class="table table-sm">
        <tr>
            <th>Domain ID</th>
            <th>Sub Domain ID</th>
            <th>Sub domain Title</th>
            <th>Sub domain objective</th>
        </tr>

    {% for record in a6titles %}
    <tr>
        <td colspan=1>A6</td>
        <td>{{ record.subDomain_id }}</td>
        <td>titles: {{ record }}</td>
    </tr>
    {% endfor %}

Теперь, как вы можете себе представить. Когда таблица заполняется. Идентификатор домена зацикливается и заполняет его результаты. То же самое с поддоменами.

Как создать таблицу так, чтобы она смотрела на идентификатор домена. Видит A5, а затем заполняет только поддомен A5.1 (идентификатор, заголовок и цель) в соответствующих столбцах. Затем он видит A6 и так далее.

Я думаю о двух вариантах. 1. Я создаю функцию в своих представлениях с помощью if / else и выводю ее в словарь. 2. Я использую что-то вроде djangotables2. Я не хочу узнавать что-то новое, так как я все еще постигаю основные принципы c Django.

1 Ответ

0 голосов
/ 12 января 2020

Итак, вы хотите получить Domain в качестве заголовка colspan для каждого набора SubDomain?

domains = Domains.objects.all()

<table class="table table-sm">
    <tr>
        <th>Sub Domain ID</th>
        <th>Sub domain Title</th>
        <th>Sub domain objective</th>
    </tr>
    {% for domain in domains %}
        <tr>
            <td colspan=3>{{ domain.domain_id }}</td>
        </tr>
        {% for sub_domain in domain.subdomain_set.all %}
            <tr>
                <td>{{ sub_domain.subDomain_id }}</td>
                <td>{{ sub_domain.subDomain_title }}</td>
                <td>{{ sub_domain.subDomain_objective }}</td>
            </tr>
        {% endfor %}
    {% endfor %}
</table>
...