繁体   English   中英

Django 和 Postgres:未强制执行唯一约束? “空间”编码?

[英]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 管理员复制的确切值:

  1. 2 StR 46/15
  2. 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.

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