Хобрук: Ваш путь к мастерству в программировании

Нечувствительный к регистру Charfield в моделях django

Я пытаюсь создать модель категории, в которой имя имеет unique=True, но практически я все еще могу добавить одно и то же имя категории с разными регистрами.

т. е. у меня есть категория "Еда", я все еще могу добавить еду, ЕДА, ЕДА, ЕДА

Есть ли за этим какая-то философия? или это работа в процессе.

Потому что в реальном мире, если я думаю о категории «Еда», это всегда будет еда, независимо от того, в каком падеже она упоминается.

Спасибо заранее, чтобы посмотреть на это.


Ответы:


1

Чтобы ответить на мой собственный вопрос:

Я обнаружил, что у меня может быть чистый метод на моей модели. Поэтому я добавил

class Category(models.Model):
    name = models.CharField(max_length=200, unique=True)

    def clean(self):
        self.name = self.name.capitalize()

Это заглавная первая буква, которая затем обрабатывается методом save, который вызывает метод validate_unique для возникновения ошибки.

29.02.2012
  • 2017: Работает очень хорошо! 08.11.2017

  • 2

    Вы можете использовать специальное поле модели Postgre под названием поля Citext ( поля без учета регистра).

    На данный момент есть три варианта:

    class CICharField(**options), class CIEmailField(**options) и class CITextField(**options)

    Пример:

    from django.db import models
    
    from django.contrib.postgres.fields import CICharField
    
    
    class Category(models.Model):
        name = CICharField(verbose_name="Name", max_length=255)
    
    

    Но не забудьте создать расширение для полей citext. см. здесь.

    По сути, вы должны добавить класс расширения в файл миграции внутри массива operations перед первой операцией CreateModel.

    # migration file
    
        operations = [
            CITextExtension(),        # <------ here
            migrations.CreateModel(
                ...
            ),
            ...,
        ]
    
    
    10.01.2021

    3

    Установка для столбца режима сортировки без учета регистра должна исправить это. Возможно, вам придется сделать это на уровне SQL.

    28.02.2012
  • Вы имеете в виду настройку столбца с учетом регистра? Вопрос в том, как это сделать в Django. 14.05.2015
  • Я думаю, что это лучший подход. Clean не вызывается в методе сохранения 10.01.2021
  • Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..