Django ORM:将模型之间的外键关系限制在有限的次数内

Django ORM:将模型之间的外键关系限制在有限的次数内,django,orm,Django,Orm,我有两种型号:汽车和驾驶员。在任何给定的时间点,一辆车可以有零名、一名或最多两名驾驶员。我当前的车型设置允许在一辆车上有两个以上的驾驶员。如何将每辆车的驾驶员人数限制为两人 我当前的模型 class DriverStatus(models.Model): status = models.CharField(max_length=200) def __str__(self): return f'{self.status}' class Driver(models.Model):

我有两种型号:汽车和驾驶员。在任何给定的时间点,一辆车可以有零名、一名或最多两名驾驶员。我当前的车型设置允许在一辆车上有两个以上的驾驶员。如何将每辆车的驾驶员人数限制为两人

我当前的模型

class DriverStatus(models.Model):
status = models.CharField(max_length=200)
def __str__(self):
    return f'{self.status}'



class Driver(models.Model):
    name = models.CharField(max_length=200)
    driver_num = models.IntegerField()
    profile_image = models.ImageField(default="default.jpg",upload_to="images")
    status = models.ForeignKey(DriverStatus, on_delete=models.CASCADE)
    current_vehicle = models.ForeignKey(Vehicle, on_delete=models.SET_NULL,null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        return f'{self.name}'


class Vehicle(models.Model):
    vehicle_number = models.CharField(max_length=200)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self):
        return f'{self.vehicle_number

您不能在数据库级别执行此操作。但您可以添加模型验证:

或者,您可以使用模型的clean方法进行验证:


在驱动程序类中添加此选项:

  def clean(self):
    cleaned_data = super(Driver, self).clean()
    vehicle = self.cleaned_data.get('current_vehicle')
    if not vehicle:
        return cleaned_data
    drivers_count = Driver.objects.filter(current_vehicle=vehicle).exclude(pk=self.instance.pk).count()
    if drivers_count >= 2:
      raise ValidationError('Maximum drivers reached')
    return cleaned_data

我还没有测试过,但这就是我的想法

你查过了吗?我了解验证器的使用部分。在我的情况下,如果两个以上的驾驶员已经映射到所选车辆,我的验证器(将在当前的驾驶者车型的车辆中使用)应该抛出错误。然而,我不知道。无法理解第二个链接以及如何获取已映射到车辆的驾驶员数量以执行验证我添加了一个示例这需要一些修改,但完全符合我的要求。多谢各位