[英]How do I model a registration system with the following relationship constraints in Django?
我正在尝试使用 Django 创建一个黑客马拉松管理系统 web 应用程序。 每个hackathon可以有尽可能多的参与大学(这里没有限制)。现在,每个参与的大学最多可以有3个团队,每个团队最多可以有4个人(1-4)。 我是 Django 的新手,非常感谢您的帮助。
from django.db import models
class Hackathon(models.Model):
name = models.CharField(max_length=50,blank=True,default='')
eventId = models.CharField(max_length=50, blank=True, default='')
startDate = models.DateField(null=True)
endDate = models.DateField(null=True)
location = models.TextField(max_length=100, blank=True, default='')
description = models.TextField(max_length=800, blank=True, default='')
#participants = models.ManyToManyField(...)??
def __str__(self):
return self.name
class University(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Team(models.Model):
team_name = models.CharField(max_length=50)
member_count = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1), MaxValueValidator(4)])
uni = models.ForeignKey(University, on_delete = models.CASCADE)
def __str__(self):
return self.team_name
class Person(models.Model):
name = models.CharField(max_length=50)
belongs_to = models.ForeignKey(Team,on_delete = models.CASCADE)
您的关系模式似乎适合您描述的用例。
您描述的约束(最多 3 个团队,每个团队最多可以有 4 人)不是真正的数据库约束,而是应用程序约束。 您可能必须在覆盖您的模型save()
方法时定义验证逻辑。
class Team(models.Model):
def save(self, *args, **kwargs):
if self.uni.teams.count() >= 3:
raise ValidationError("This university already has its 3 teams")
super().save(*args, **kwargs)
class Person(models.Model):
def save(self, *args, **kwargs):
if self.team.persons.count() >= 4:
raise ValidationError("This team already has its 4 people")
super().save(*args, **kwargs)
另外,我建议您使用Django 'User' model ,它带有几个实用程序:密码管理、用户名唯一性等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.