Одно членство для каждого пользователя для каждого клуба

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

class Membership(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='memberships')
    club = models.ForeignKey(Club, on_delete=models.CASCADE, related_name='memberships')
    points = models.PositiveIntegerField(default=0, blank=True, null=True)
    sub_date = models.DateField(auto_now_add=True)

    #other...

Если я буду действовать таким образом, то можно создать несколько подписок пользователя на один и тот же клуб. Как я могу решить эту проблему?

Используйте отношения m2m.

field = models.ManyToManyField(Your_model)

Используйте unique_together в модели Meta, чтобы объект Membership не мог иметь тот же пользовательский и клуб, что и другой объект:

class Membership(models.Model):
    ...
    class Meta:
        unique_together = ['user', 'club']

Если вы используете форму или админку Django для создания членства, которое уже существует для данного пользователя/клуба, то будет выдана ошибка.

Вернуться на верх