Python 如何在Django中使用以下关系约束对注册系统建模?
我正在尝试使用Django创建一个hackathon管理系统web应用程序。每个hackathon可以有尽可能多的参与大学(这里没有限制)。现在,每个参与大学最多可以有3个团队,每个团队最多可以有4人(1-4人)。我是Django的新手,因此非常感谢您的帮助Python 如何在Django中使用以下关系约束对注册系统建模?,python,django,django-models,relationship,Python,Django,Django Models,Relationship,我正在尝试使用Django创建一个hackathon管理系统web应用程序。每个hackathon可以有尽可能多的参与大学(这里没有限制)。现在,每个参与大学最多可以有3个团队,每个团队最多可以有4人(1-4人)。我是Django的新手,因此非常感谢您的帮助 from django.db import models class Hackathon(models.Model): name = models.CharField(max_length=50,blank=True,defau
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人)实际上不是DB约束,而是应用程序约束。您可能需要在覆盖模型
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)
另外,我建议您使用,它附带了几个实用工具:密码管理、用户名唯一性等等。您的关系模式似乎适合您描述的用例 您描述的约束(最多3个团队,每个团队最多可以有4人)实际上不是DB约束,而是应用程序约束。您可能需要在覆盖模型
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)
另外,我建议您使用,它附带了几个实用工具:密码管理、用户名唯一性等等。在这种情况下,最好的开始是了解您使用的是什么数据库。模型是数据库中最简单的表形式。了解您使用的数据库将帮助您了解如何构建模型。考虑数据库如何工作、如何限制、如何添加约束以及如何根据项目的需要构建数据。这个答案可能有助于限制项目目标可接受的对象数量。在这种情况下,最好的开始是了解您正在使用的数据库。模型是数据库中最简单的表形式。了解您使用的数据库将帮助您了解如何构建模型。考虑数据库如何工作、如何限制、如何添加约束以及如何根据项目的需要构建数据。这个答案可能有助于限制项目目标可接受的对象数量。