[英]Django & Postgres: Unique Constraint not enforced? “Space” encoding?
我有一个 django model:
class MyModel(models.Model):
my_field = models.CharField(max_length=500, unique=True)
...
如您所见,“my_field”必须是唯一的。 在创建新的 object 之前,我运行
field_value: str = 'test 12/9'
try:
o = MyModel.objects.get(my_field=field_value)
except MyModel.DoesNotExist:
o = MyModel()
...
检查是否存在具有唯一field_value
的 object。 到目前为止,一切都很好。 现在我意识到我在my_field
中有数百个“重复”值。
以下是从 django 管理员复制的确切值:
2 StR 46/15
2 StR 46/15
如您所见,它们似乎是相同的。 但是,如果我将一个值复制到 django 管理员中的另一个字段并尝试保存它,它会失败,因为 object 已经存在这个“my_field”。 但是当保存每个 object 本身时,它不会失败。
我使用了几种工具来比较字符串,我无法找到差异。
有没有办法,django 或 postgres 在某处转换这些字符串,因此它们不再相同? 我错过了什么吗?
谢谢你的帮助!
更新:
我刚刚检查了我的字符串的二进制表示,似乎空间被解码不同。
第一个空格是:“ 10100000
”
第二个空格是:“ 100000
”
你确定你在你的 except 块中调用o.save()
吗? 当简单地调用MyModel()
时,您只需在内存中创建 object 的新实例,它不会自动由数据库中的行支持,仅调用.save()
并且应该验证任何完整性检查(例如不重复) 符合预期。 尝试以下操作:
field_value: str = 'test 12/9'
o, created = MyModel.objects.get_or_create(my_field=field_value)
# use your object now, it's in-memory and backed by a row in the database
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.