10
votes

Case Insensible Charfield à Django Modèles

J'essaie d'obtenir un modèle de catégorie où le nom a unique = true , Mais pratiquement, je peux toujours ajouter le même nom de catégorie avec des cas différents.

I.e. J'ai une catégorie appelée nourriture Je suis toujours capable d'ajouter de la nourriture, de la nourriture, de la nourriture, de la nourriture

est leur philosophie derrière cela? ou c'est un travail en cours.

Cause dans le monde réel Si je pense à la nourriture de la catégorie, ce sera toujours de la nourriture, peu importe le cas où il s'est utilisé pour mentionner elle-même.

Merci d'avance de regarder cela.


0 commentaires

3 Réponses :


-1
votes

Réglage de la colonne sur une collation insensible à la casse doit résoudre ce problème. Vous devrez peut-être le faire au niveau SQL.


2 commentaires

Vous voulez dire la colonne de réglage sur "sensible à la casse"? La question est de savoir comment faire cela à Django.


Je pense que c'est une meilleure approche. Nettoyer n'est pas appelé sur la méthode de sauvegarde



22
votes

Pour répondre à ma propre question:

J'ai trouvé que je peux avoir une méthode propre sur mon modèle. Donc j'ai ajouté xxx

Il capitalise la première lettre, qui est ensuite traitée par la méthode , qui appelle le validate_unique méthode pour soulever une erreur.


2 commentaires

2017: Très bien fonctionne!


2021: ne fonctionne pas



2
votes

Vous pouvez utiliser un champ modèle spécifique postgre appelé Champs Citezex (champs insensibles de cas) .

Il y a trois options pour le moment: p>

Classe CICHARFIELD (** Options) Code>, Classe CIEMailfield (** Options) CODE> et Class CitExtField (** Options) CODE> P>

Exemple: P>

# migration file

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


0 commentaires