2010-07-07 2 views
2

У меня есть модель Django, которая выглядит следующим образом:кода на основе уникальности Django модель

class Categories(models.Model): 
    """ 
    Model for storing the categories 
    """ 
    name = models.CharField(max_length=8) 
    keywords = models.TextField() 
    spamwords = models.TextField() 
    translations = models.TextField() 

def save(self, force_insert=False, force_update=False): 
    """ 
    Custom save method that converts the name to uppercase 
    """ 
    self.name = self.name.upper() 
    super(Categories, self).save(force_insert, force_update) 

Всякий раз, когда данные вставка или обновление. Я хотел бы проверить, что запись с таким же именем не существует. Это уникальное ограничение, которое я хотел бы реализовать с помощью кода, а не DB. Объем данных в этой таблице является незначительным, поэтому производительность не является проблемой. Если есть ограничение ограничения, я бы хотел создать одно из исключений встроенных ограничений Django вместо создания пользовательского.

Может ли кто-нибудь, как я лучший/самый быстрый способ выполнить это?

Спасибо.

ответ

0

в представлении

try: 
    Category.objects.get(name='name') 
except Category.DoesNotExist: 
    # call the save method of model 
+0

Куда я могу это написать? Будет ли это в методе 'save' метода Model или' clean_name'? –

+0

в представлении, которое обрабатывает запрос – Ashok

4

В вашем определении модели you can tell Django that 'name' should be unique:

name = models.CharField(max_length=8, unique=True) 

django.db.IntegrityError будет повышена, если вы пытаетесь сохранить две записи с тем же именем.

+0

от OP, «Я бы хотел реализовать через код, а не в DB» – Ashok

+0

Хмммм, хорошо ... но ваш ответ также читается из БД с помощью .get() - или я интерпретирую «не БД» слишком буквально? :-) – msanders

+0

Просто из любопытства. Существует ли исключающее регистр уникальное противопоставление в моделях Django? –

Смежные вопросы