简体   繁体   English

保存在数据库Django中时转换为小写

[英]Convert into lower case while saving in database Django

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 :我的models.py 目前看起来是这样的:

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:我的 admin.py 看起来像这样:

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)

Perhaps not a direct answer, but most SQL databases support collations which are case insensitive.也许不是直接的答案,但大多数 SQL 数据库都支持不区分大小写的排序规则 For example, on MySQL you could create such a table:例如,在 MySQL 上,您可以创建这样一个表:

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.这意味着您不必对 Django 代码进行任何特殊处理,无论大小写,您都可以存储。

You can try like this by overriding the get_prep_value() method.您可以通过覆盖get_prep_value()方法来尝试这样做。

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM