【发布时间】:2016-03-29 16:32:54
【问题描述】:
系统的模型有一个政党模型。
class Party(models.Model):
name = models.CharField(max_length=128)
our_reference = models.CharField(max_length=128)
彼得是一个党,另一个同名的人也叫彼得。字段“our_reference”应使用前三个字符,后跟一个 int,如 PET1。第二个彼得将是 PET2。添加了第三个人,称为 Petras。他将成为 PET3。
使用 Levenshtein 模块 (https://rawgit.com/ztane/python-Levenshtein/master/docs/Levenshtein.html) 我们需要在插入一方时测试该方是否已经存在,例如 -
def get_similar_items(mod, field, string, similarity_ratio=0.6, limit=None):
"""
Get similar items for a specific model
Example usage:
similar = get_similar_items(Entry, 'title', 'Espresso is good for you', 0.5, 10)
var = Entry.objects.filter(id__in=similar)
"""
similar_list_id = []
v = ContentType.objects.get_for_model(mod)
c = v.model_class()
for i in c.objects.all():
if ratio(string, getattr(i,field)) > similarity_ratio:
similar_list_id.append(i.id)
return similar_list_id[:limit]
见于https://djangosnippets.org/snippets/288/
如果派对存在,不要使用新的 int 编号,而是使用旧的,即 PET1 作为参考。如果该方不存在,则制作一个新的参考 PET4。
对问题进行了编辑,以使用例更清晰。如何实施?
【问题讨论】:
-
最终决定采用一个简单的解决方案 - 使用 knelson 建议的 UUID 和正常的 postgres 序列。
code
标签: python django django-models exists distinct-values