Django:强制同一外键的所有模型对象字段唯一

6 投票
1 回答
798 浏览
提问于 2025-04-16 13:49

假设我在Django中定义了以下模型(还没测试):

class CarMaker(models.Model):
   name = models.CharField("Name of car maker",
                            max_length=40)


class Car(models.Model):
   car_id = models.IntegerField("ID for this particular car")
   maker = models.ForeignKey("Maker of this car")

有没有一种标准的Django方法,可以确保所有同一个maker(制造商)的Car(汽车)都有一个独特的car_id(汽车ID),而不需要让car_id在所有Car中都是唯一的呢?

举个例子,有两个汽车制造商,“Skoda”和“Renault”。Skoda生产了400辆汽车,而Renault生产了300辆汽车。我想确保Skoda的car_id在Skoda的汽车中是唯一的,Renault的car_id在Renault的汽车中也是唯一的,但不需要在所有Car中都是唯一的。

谢谢

1 个回答

13

你可以使用模型选项 unique_together 来创建这种类型的约束。具体可以参考Django的文档:http://docs.djangoproject.com/en/1.2/ref/models/options/#unique-together

class Car(models.Model):
    car_id = models.IntegerField("ID for this particular car")
    maker = models.ForeignKey("Maker of this car")

    class Meta(object):
        unique_together = ("car_id", "maker")

撰写回答