Одно членство для каждого пользователя для каждого клуба
Я создаю модели для управления клиентами и спортивными центрами. Каждый клиент может быть записан в несколько центров только один раз, конечно. как я должен действовать для этого?
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 для создания членства, которое уже существует для данного пользователя/клуба, то будет выдана ошибка.