Связь между двумя моделями в 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 %}
Вернуться на верх