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

时间:2020-01-25 18:44:52

标签: django orm

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

我当前的型号

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

1 个答案:

答案 0 :(得分:1)

您不能在数据库级别上执行此操作。但是您可以添加模型验证:https://docs.djangoproject.com/en/3.0/ref/validators/

或者您可以使用模型的clean方法进行验证: Validate count() constraint in many to many relation before saving an instance in django


在驱动程序类中添加它:

+----+------+-------+-------------+
|    | long | short | profit      |
+----+------+-------+-------------+
| 4  | B    | A     | 149.635831  |
+----+------+-------+-------------+
| 12 | D    | A     | 101.525670  |
+----+------+-------+-------------+
| 8  | C    | A     | 78.598163   |
+----+------+-------+-------------+
| 6  | B    | C     | 71.037668   |
+----+------+-------+-------------+
| 7  | B    | D     | 48.110161   |
+----+------+-------+-------------+
| 14 | D    | C     | 22.927507   |
+----+------+-------+-------------+
| 11 | C    | D     | -22.927507  |
+----+------+-------+-------------+
| 13 | D    | B     | -48.110161  |
+----+------+-------+-------------+
| 9  | C    | B     | -71.037668  |
+----+------+-------+-------------+
| 2  | A    | C     | -78.598163  |
+----+------+-------+-------------+
| 3  | A    | D     | -101.525670 |
+----+------+-------+-------------+
| 1  | A    | B     | -149.635831 |
+----+------+-------+-------------+

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