Django: сделать поле уникальным для всех объектов модели с одним и тем же внешним ключом - PullRequest
6 голосов
/ 16 марта 2011

Предположим, у меня есть следующие модели, определенные в 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, гарантирующий, что все Car с одинаковыми maker имеют уникальные car_id, не делая car_id уникальным для всех Car с?

Например, есть два автопроизводителя, "Skoda" и "Renault".Есть 400 Car s, сделанные Skoda, и 300 Car s, сделанные Renault.Я хочу убедиться, что car_id уникален для всех Skodas и уникален для всех Renaults, но не обязательно уникален для всех Car s.

Спасибо

1 Ответ

12 голосов
/ 16 марта 2011

Вы можете использовать параметры модели 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")
...