Напечатайте название проекта в шаблоне jinja - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть следующие модели

Класс AcsObject

class AcsObjects(models.Model):
    object_id = models.IntegerField(primary_key=True)
    object_type = models.ForeignKey('AcsObjectTypes', db_column='object_type')
    context = models.ForeignKey('self', blank=True, null=True)
    security_inherit_p = models.BooleanField()
    creation_user = models.IntegerField(blank=True, null=True)

Класс проектов

class ImProjects(models.Model):
    project = models.ForeignKey('AcsObjects',related_name='project', on_delete=False, primary_key=True)
    project_name = models.CharField(max_length=1000)
    project_nr = models.CharField(max_length=100)
    project_path = models.CharField(max_length=100)

Класс TimesheetTasks

class TimesheetTasks(models.Model):
    task = models.ForeignKey('Projects', related_name='t_task', on_delete=False, primary_key=True)
    uom = models.ForeignKey('Categories', related_name='u_uom', on_delete=False)
    planned_units = models.FloatField(blank=True, null=True)
    billable_units = models.FloatField(blank=True, null=True)

Я записал следующий код в файл views.py.

class TimesheetData(TemplateView):
    template_name = 'timesheet.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["da"] = TimesheetTasks.objects.all()
        return context

Я хочу напечатать имя_проекта, но оно дает мне идентификатор_программы (task_id и project_id одинаковы) с использованием шаблона jinja.

расписание. html

<body>
<p> {{da}} </p>
<table class="table table-light">
    <thead class="thead-light">
        <tr>
            <th>Task </th>
        </tr>
    </thead>
    <tbody>
        {% for timesheet in da %}
        <tr>
            <td> {{timesheet.task}} </td>
        </tr>
        {% endfor %}
    </tbody>
  </table>
</body>

Это дает мне пустой вывод Вывод

1 Ответ

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

Это просто потому, что у вас еще нет доступа к полю product_name.

<tbody>
    {% for timesheet in da %}
    <tr>
        <td> {{timesheet.task}} </td>
    </tr>
    {% endfor %}
</tbody>

При этом Джинджа просто отображает идентификатор задачи (идентификатор проекта), потому что Джинджа думает, что вы не нужна любая другая информация, кроме значения внешнего ключа. Таким образом, чтобы увидеть project_name, вы должны использовать это вместо: timesheet.task.project_name, он делает свою работу.

<tbody>
    {% for timesheet in da %}
    <tr>
        <td> {{timesheet.task.project_name}} </td>
    </tr>
    {% endfor %}
</tbody>

Просто хочу упомянуть, что это может привести к другой проблеме (проблема производительности) когда Jinja должен запросить данные, когда визуализировать шаблон. Чтобы избавиться от этого, рассмотрите возможность использования select_related , который является API Django Queryset, проверьте его и проведите некоторый эксперимент с этим API, он действительно полезен при использовании Django.

...