Джанго уникальное поле - PullRequest
6 голосов
/ 03 июля 2010

Есть ли другой способ REGEX (или другой способ) гарантировать, что поле класса модели будет уникальным?(он не является ключом или, по крайней мере, не объявлен как ключ, является простым CharField)

Ответы [ 3 ]

15 голосов
/ 03 июля 2010

Обычный способ сделать одно поле уникальным - использовать аргумент unique для конструктора поля.

2 голосов
/ 08 августа 2015

Если вам нужно сделать это уникальным для нескольких полей, взгляните на: уникальный-вместе

0 голосов
/ 16 августа 2018

Есть два способа сделать это.Первый - пометить весь столбец как unique.Например: product_name = models.Charfield(max_length=10, unique=True)

Этот метод хорош, если вы хотите, чтобы весь столбец был уникальным независимо от ситуации.Это может быть использовано для username, id, key и т. Д.

Однако, если столбец не может быть уникальным по своей природе, но должен быть уникальным по отношению к другим, вы должны использовать руководствоспособ.

from django.core.exceptions import ObjectDoesNotExist

try:
    n = WishList.objects.get(user=sample_user, product=sample_product)
    # already exists
    return False
except ObjectDoesNotExist:
    # does not exist
    wish_list = WishList(user=sample_user, product=sample_product)
    wish_list.save()
    return True

Возьмите это в качестве примера.У вас есть список пожеланий, ни один из предметов не может быть уникальным.Один пользователь может иметь много продуктов, и один продукт может быть в списке желаний многих пользователей.Однако один пользователь не может добавить один конкретный продукт в свой список пожеланий более одного раза.И здесь unique=True нельзя использовать, и мы должны использовать try и except

...