Модели Django - использование двух значений внешних ключей - PullRequest
1 голос
/ 06 марта 2019

Я довольно новичок в django, поэтому мой вопрос может быть базовым, но все же было бы здорово, если бы вы могли помочь sicne. Я не знаю, как даже взглянуть на эту проблему, кроме самого простого метода.У меня есть такая модель:

class Role(models.Model):
    id = models.AutoField(primary_key=True)
    job = models.ForeignKey('Job', on_delete=models.CASCADE)
    project = models.ForeignKey('Project', on_delete=models.CASCADE)
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)

И теперь я хотел бы получить все роли для данного проекта:

current_project = Project.objects.get(slug=slug_name)

и на шаблоне отобразить все роли в виде строк с именем задания(из модели задания) и имя пользователя (из модели пользователя) в цикле следующим образом:

<tr>
  <td>{{job.name}}</td>
  <td>{{user.name}}</td>
</tr>
  

1 Ответ

3 голосов
/ 06 марта 2019

Используйте обратную связь :

{% for role in current_project.role_set.all %}
<tr>
  <td>{{ role.job.name }}</td>
  <td>{{ role.user.username }}</td>
</tr>
{% endfor %}

РЕДАКТИРОВАТЬ:

Есть ли способ сделать это в модели или в виде вместо (не используя другойпеременная), как prefetch_related?Поскольку метод в шаблоне генерирует несколько повторяющихся SQL-запросов.

IIRC, вы можете применить prefetch_related и select_related к Project набору запросов в вашем представлении, то есть

qs = Project.objects.prefetch_related(....).select_related(...)
current_project = qs.get(pk=...)

но это по памяти, и у меня нет времени перепроверить это прямо сейчас ...

...