Django models 如何使模型不区分大小写

Django models 如何使模型不区分大小写,django-models,Django Models,我有一个模型 课堂考试(models.Model): Examname=models.CharField(null=False,blank=False,max_length=255) Examname必须不区分大小写,以避免重复数据。我将所有内容转换为小写字母并存储。但它并没有检测到重复数据。例如,如果我将External作为Examname插入,它将存储为External,但如果我将其他名称作为External,则它仅检测为dulicate数据。外部或外部或至少有一个大写字母,它不会检测为重复

我有一个模型

课堂考试(models.Model): Examname=models.CharField(null=False,blank=False,max_length=255)


Examname必须不区分大小写,以避免重复数据。我将所有内容转换为小写字母并存储。但它并没有检测到重复数据。例如,如果我将External作为Examname插入,它将存储为External,但如果我将其他名称作为External,则它仅检测为dulicate数据。外部或外部或至少有一个大写字母,它不会检测为重复数据,而是存储为小写字母。首先,如果
regno
应存储数字和字符,则不要使用
FloatField
,例如
CharField

如果您希望避免区分大小写的问题,例如,您可能希望在保存对象时始终将值存储为小写,如下所示:

def保存(self,*args,**kwargs):
self.regno=self.regno.lower()
超级(显示,自我)。保存(*args,**kwargs)

如果需要保留大小写,另一种选择是在次要
字符域中复制低大小写内容。它可以在save方法中自动执行

如果尝试插入重复的值,django将抛出一个应处理的
IntegrityError

类MyModel(models.Model):
mytextfield=models.CharField()
lowcase_textfield=models.CharField(unique=True)
def保存(自身、*args、**kwargs):
self.lowcase_textfield=self.mytextfield.lower()
尝试:
超级(MyModel,self).save(*args,**kwargs)
除完整性错误外,如e:
#在此处插入异常处理
通过

我尝试将数据从管理页面添加到模型中,但不将其转换为小写字母。请用您尝试实现的内容更新您的问题,以便我们更好地理解。你在Show model中添加了save函数了吗?类检查(models.model):Examname=models.CharField(null=False,blank=False,max_length=255)def save(self,*args,**kwargs):self.regno=self.Examname.lower()返回super(Exam,self)。save(*args,**kwargs)def_ustr(self):return self.examName编辑您的问题,而不是在注释中发布您的类,这样会更具可读性。我有点困惑,regno似乎属于Show模式,但您似乎已经覆盖了考试的保存方法。请澄清您的问题。但unique_仅适用于小写字母。如何使不区分大小写的唯一模型。
def save(self, *args, **kwargs):
    self.Examname = self.Examname.lower()
    return super(Exam, self).save(*args, **kwargs)

class Meta:
    unique_together = ["Examname"]    

def __str__(self):
    return self.Examname