Связь между двумя моделями в Django
Кажется, что вопрос тривиальный, но я новичок в Django. У меня есть две модели user и competition.
Пользователь может создавать и участвовать в одном или многих соревнованиях. Как определить это отношение, ведь пользователь может быть владельцем конкурса/ов и может быть участником одного или нескольких конкурсов.
Предположим, у вас есть две таблицы User и Competition:
тогда в соревновании вы можете использовать models.ManyToManyField
Пример
class User:
...
class Competition:
...
creator = models.ForeignKey(User)
participents = models.ManyToManyField(User)
В дополнение к ответу выше, вы можете явно определить промежуточную сущность User и Competition, если хотите настроить ее. Это будет выглядеть примерно так:
class User(models.Model):
...
name = models.CharField(max_length=50)
class Competition(models.Model):
...
creator = models.ForeignKey(User)
participants = models.ManyToManyField(
User,
through="Participants",
)
class Participants(models.Model):
TEAM_COLOR_CHOICES = [
(1,'White'),
(2, 'Red'),
(3, 'Blue')
]
user = models.ForeignKey("User", on_delete=models.CASCADE)
competition = models.ForeignKey("Competition", on_delete=models.CASCADE)
teamcolor = models.PositiveSmallIntegerField(default=1, choices=TEAM_COLOR_CHOICES )
Вы также можете отобразить атрибуты внутри посредника и его родителей в шаблоне HTML с помощью:
{% for participant in context.participants_set.all %}
{{ participant.user.name }}
{{ participant.teamcolor }}
...
{% endfor %}