0

I am adding few names in my database using the admin panel. How can I convert the the name string to lowercase before saving?

My models.py currently looks this :

from os import name
from django.db import models
from datetime import datetime

# Create your models here.
class Certificate(models.Model):
    name = models.CharField(max_length=50, default="", primary_key=True)
    CertID = models.CharField(max_length=50)
    event = models.CharField(max_length=50, default="")
    year = models.IntegerField(default=datetime.today().year)

def __str__(self):
    return self.CertID

My admin.py looks like this:

from django.contrib import admin
from .models import Certificate


class AdminCertificate(admin.ModelAdmin):
    list_display = ['CertID','name','event','year']


# Register your models here.
admin.site.register(Certificate, AdminCertificate)

2 Answers2

0

Perhaps not a direct answer, but most SQL databases support collations which are case insensitive. For example, on MySQL you could create such a table:

CREATE TABLE yourTable (
    c1 VARCHAR(10)
) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;

Were you insert any text from the above character set, its case would not matter. This means you wouldn't have to do any special handling from your Django code, you could just store regardless of case.

Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
0

You can try like this by overriding the get_prep_value() method.

class NameField(models.CharField):
    def __init__(self, *args, **kwargs):
        super(NameField, self).__init__(*args, **kwargs)

    def get_prep_value(self, value):
        return str(value).lower()

class Certificate(models.Model):
    name = NameField(max_length=50, default="", primary_key=True)
    CertID = models.CharField(max_length=50)
    event = models.CharField(max_length=50, default="")
    year = models.IntegerField(default=datetime.today().year)
arjun
  • 7,230
  • 4
  • 12
  • 29