У меня есть 5 моделей, которые связаны с внешними ключами следующим образом:
Section (Registration.section)
^ 1
|
v ∞
Registration < ∞ --- 1 > Event (Registration.event)
^ ∞
|
v 1
User (Registration.user, Profile.user)
^ 1
|
v 1
Profile
Из этих связанных моделей я пытаюсь отобразить данные в такой таблице:
| ID | Other Profile fields | Section1 | Section2 | SectionN |
|----------------|-------------------------|------------------------------|-----------------------------|----------|
| user1.username | eg. user1.profile.grade | Registration.objects.get( | Registration.objects.get( |
| section=Section1, | section=Section1, |
| user=user1 | user=user1 |
| ).event | ).event |
|----------------|-------------------------|------------------------------|-----------------------------|----------|
| user2.username | user2.profile.grade | ...event |None (needs to handle this) |
|----------------|-------------------------|------------------------------|-----------------------------|----------|
| user3.username | user3.profile.grade | None (needs to handle this) |None (needs to handle this) | |
Где у каждого пользователя есть отдельная строка. Что я не могу понять, как сделать это эффективно, так это получить регистрацию (и) для каждого раздела.
Я МОГУ сделать это, вручную манипулируя данными в python с помощью словарей и циклов et c, но это настолько неэффективно, что у моего сервера истекает время ожидания, прежде чем он сможет завершить процесс, если список пользователей слишком велик.
Какую структуру набора запросов мне нужно создать, чтобы иметь возможность выводить такие данные в шаблоне ?
В каждом разделе будет только один объект регистрации на пользователя:
class Registration(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
section = models.ForeignKey(section, on_delete=models.CASCADE)
class Meta:
unique_together = ("event", "user", "section")