Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中使用以下关系约束对注册系统建模?_Python_Django_Django Models_Relationship - Fatal编程技术网

Python 如何在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

我正在尝试使用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,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)

另外,我建议您使用,它附带了几个实用工具:密码管理、用户名唯一性等等。

在这种情况下,最好的开始是了解您使用的是什么数据库。模型是数据库中最简单的表形式。了解您使用的数据库将帮助您了解如何构建模型。考虑数据库如何工作、如何限制、如何添加约束以及如何根据项目的需要构建数据。这个答案可能有助于限制项目目标可接受的对象数量。在这种情况下,最好的开始是了解您正在使用的数据库。模型是数据库中最简单的表形式。了解您使用的数据库将帮助您了解如何构建模型。考虑数据库如何工作、如何限制、如何添加约束以及如何根据项目的需要构建数据。这个答案可能有助于限制项目目标可接受的对象数量。