Джанго уникальный объект (не уникальное поле)? - PullRequest
1 голос
/ 12 июля 2019

как сделать уникальный объект (не уникальным для каждого поля)

например:

имя: Honda

категория: автомобиль

успех

имя: Honda

категория: велосипед

успех

имя: Honda

категория: велосипед

ошибка, потому что все поля имеют одно и то же значение для другого объекта если я использую unique в поле, второй случай будет неудачным, ведь coz honda (имя) уже создано мой код: class Category(models.Model): name = models.CharField(max_length=127,unique=True) def __str__(self): return self.name class Brand(models.Model): name = models.CharField(max_length=127,unique=True) category = models.ForeignKey(Category,on_delete=models.CASCADE) def __str__(self): return self.name

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Django предоставляет опцию Meta, называемую уникальным вместе, которая, кажется, удовлетворяет этому варианту использования:

class Brand(models.Model):
    name = models.CharField(max_length=127)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    class Meta:
        unique_together = [[“name”, “category”]]

Документы Django указывают, что это может быть устаревшим, и рекомендуют более полнофункциональный мета-вариант UniqueConstraint

class Meta:
    constraints = [
        UniqueConstraint(fields=[“name”,”category”], name=“unique_object”)
    ]
1 голос
/ 12 июля 2019

Вы должны использовать мета-класс с атрибутом unique_together: https://docs.djangoproject.com/en/2.2/ref/models/options/#unique-together

class Brand(models.Model):
    name = models.CharField(max_length=127)
    category = models.ForeignKey(Category,on_delete=models.CASCADE)

    class Meta:
        unique_together = ['name', 'category']

    def __str__(self):
        return self.name
...