Отображать команды пользователей в шаблоне - PullRequest
0 голосов
/ 23 мая 2019

У меня есть 3 модели - Project, Team и CustomUser. Я пытаюсь отобразить список команд, в состав которых входит пользователь, на странице сведений о пользователе и отобразить список пользователей, которые являются частью команды проекта, на странице сведений о проекте, но я нахожусь в режиме ожидания.

# project/users/models.py

class CustomUser(AbstractUser):
    name = models.CharField(max_length=255)

    # Relationship Fields
    team = models.ManyToManyField(
        'users.Team',
        related_name="teams",
    )

class Team(models.Model):
    # Relationship Fields
    project = models.OneToOneField(
        'projects.Project',
        on_delete=models.CASCADE, related_name="projects", 
    )
# project/projects/models.py

class Project(models.Model):
    name = models.CharField(max_length=255)

проект / проекты / шаблоны / проекты / project_detail.html

{% for user in project.team.user.all %}
    {{ user.name }}
{% endfor %}

Я пробовал варианты выше, такие как

{% for user in users.teams.projects.all %}
    {{ user.name }}
{% endfor %}

но я не могу ничего показать. Я думаю, что делаю что-то простое неправильно - я прочитал документы для отображения ManyToManyFields, но я в растерянности! Кто-нибудь может указать мне правильное направление?

1 Ответ

1 голос
/ 23 мая 2019

Я не уверен, но я думаю, что related_name пропущено используется в этой ситуации:

class Team(models.Model):
# Relationship Fields
project = models.OneToOneField(
    'projects.Project',
    on_delete=models.CASCADE, related_name="projects", 
)

это означает, что в одном объекте класса Project будет иметь атрибут с именем проекты, который будет являться ссылкой на команды. Я верю, что вы хотите:

class Team(models.Model):
# Relationship Fields
project = models.OneToOneField(
    'projects.Project',
    on_delete=models.CASCADE, related_name="team", 
)

Так вы сможете звонить в project.team.

Изменение вашего кода:

# project/users/models.py

class CustomUser(AbstractUser):
    name = models.CharField(max_length=255)

    # Relationship Fields
    team = models.ManyToManyField(
        'users.Team',
        related_name="customers",
    )

class Team(models.Model):
    # Relationship Fields
    project = models.OneToOneField(
        'projects.Project',
        on_delete=models.CASCADE, related_name="team", 
    )

class Project(models.Model):
    name = models.CharField(max_length=255)

Итак, теперь в шаблоне вы можете:

{% for user in project.team.customers.all %}
    {{ user.name }}
{% endfor %}
...