【问题标题】:how to make the models caseinsensitive如何使模型不区分大小写
【发布时间】:2020-03-03 23:49:00
【问题描述】:

我有一个模型。

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

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

考试名称必须不区分大小写,以避免重复数据。我将所有字母转换为小写字母并存储。但它没有检测到重复数据。例如,如果我将 External 作为 Examname 插入,它将存储为外部,但如果我作为外部提供其他名称,那么它只会检测为重复数据。外部或外部或任何至少一个大写字母没有检测为重复数据,而是存储为小写字母

【问题讨论】:

    标签: django-models


    【解决方案1】:

    首先,如果regno 应该存储数字和字符,请不要使用FloatField,而是例如CharField

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

        def save(self, *args, **kwargs):
            self.regno = self.regno.lower()
            super(Show, self).save(*args, **kwargs)
    

    如果您需要保留大小写,另一种选择是在辅助CharField 中复制小写内容。这可以在 save 方法中自动化。

    如果你尝试插入重复值,django 会抛出一个IntegrityError,应该处理一下。

    class MyModel(models.Model):
        mytextfield = models.CharField()
        lowcase_textfield = models.CharField(unique=True)
    
        def save(self, *args, **kwargs):
            self.lowcase_textfield = self.mytextfield.lower()
            try:
                super(MyModel, self).save(*args, **kwargs)
            except IntegrityError as e:
                # INSERT YOUR EXCEPTION HANDLING HERE
                pass
    

    【讨论】:

    • 我尝试通过将数据从管理页面添加到模型但没有转换为小写字母
    • 您能否用您试图实现的目标更新您的问题,以便我们更好地理解。你在 Show 模型中添加了保存功能吗?
    • 类考试(models.Model): Examname = models.CharField(null=False, blank=False, max_length=255) def save(self, *args, **kwargs): self.regno = self.Examname.lower() return super(Exam, self).save(*args, **kwargs) def __str__(self): return self.Examname
    • 编辑您的问题而不是在评论中发布您的课程,这将更具可读性。我有点困惑, regno 似乎属于 Show 模型,但您似乎已经覆盖了 Exam 的保存方法。请澄清您的问题。
    • 但 unique_together 仅适用于小写字母。如何制作不区分大小写的唯一模型。
    猜你喜欢
    • 2017-06-26
    • 2014-08-08
    • 2021-10-14
    • 2011-10-14
    • 2020-08-29
    • 1970-01-01
    • 2013-03-06
    • 2019-01-01
    相关资源
    最近更新 更多