gpt4 book ai didi

python - Django 中不区分大小写的字段

转载 作者:太空宇宙 更新时间:2023-11-03 14:17:47 24 4
gpt4 key购买 nike

目前,我有一个 Django 项目,其中包含一个名为 Event 的模型,该模型具有多个属性,其中之一是 full_name

from django.db import models


class Event(models.Model):
description = models.CharField(blank=False, max_length=200)
full_name = models.CharField(blank=False, null=True, max_length=200, unique=True)

我想要实现的是防止用户创建两个事件,其中一个名为 MyEvent,另一个名为 myevent,所以我想要名称不区分大小写。此外,我来自一个有一些有趣字母的国家,例如 š。用户已经习惯了不支持这些字母的计算机系统,因此我也想阻止两个事件的存在,一个叫做 šoo,另一个叫做 soo

基本上,我有一个函数 myfunction 并希望有一个模型约束,这样对于模型的每个实例,值 myfunction(instance.full_name) 都是唯一的.

我的第一个想法,也是可行的,是拥有一个带有干净全名函数的模型表单:

def clean_full_name(self):
return myfunction(self.cleaned_data.get('full_name'))

这行得通。但是,我现在有一个 View ,我想在其中显示所有事件的全名,而在这里,我想显示原始名称。使用我的方法,这是不可能的(功能只是单向的)。对此有优雅的解决方案吗?

最佳答案

您可以有另一个字段,它基本上是名称的一部分。事实上,我认为将 name 作为唯一字段并不是一个好主意(但我应该澄清一下,我不知道你的要求)。

基本上,对 slug field ensures uniqueness 的验证.此外,您可以将 slug 字段从所有表单等中隐藏起来。

例子:

>>> from django.utils.text import slugify
>>> slugify(u"śtack Overflow")
u'stack-overflow'
>>> slugify(u"stack Overflow")
u'stack-overflow'
>>> slugify(u"stack Overflow")
u'stack-overflow'
>>> slugify(u"stack \t Overflow")
u'stack-overflow'
>>> slugify(u"stack \n Overflow")
u'stack-overflow'

其中一些组合映射到相同的 slug - 这确保了广泛用例的唯一性。

关于python - Django 中不区分大小写的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com