我正在尝试为美国创建一个模型字段,该字段可在我的应用程序中跨多个模型使用。我有一本常见国家缩写词和拼写字典,与相应的标准化名称集匹配-例如
public static List<Point> GetNeighborMatches(string[,] grid, Point item, string valueToFind)
{
var result = new List<Point>();
// if our grid is empty or the item isn't in it, return an empty list
if (grid == null || grid.Length == 0 ||
item.X < 0 || item.X > grid.GetUpperBound(0) ||
item.Y < 0 || item.Y > grid.GetUpperBound(1))
{
return result;
}
// Get min and max values of x and y for searching
var minX = Math.Max(item.X - 1, 0);
var maxX = Math.Min(item.X + 1, grid.GetUpperBound(0));
var minY = Math.Max(item.Y - 1, 0);
var maxY = Math.Min(item.Y + 1, grid.GetUpperBound(1));
// Loop through all neighbors to find a match
for (int x = minX; x <= maxX; x++)
{
for (int y = minY; y <= maxY; y++)
{
// Continue looping if we're on the 'item'
if (x == item.X && y == item.Y) continue;
// If this is a match, add it to our list
if (grid[x, y] == valueToFind) result.Add(new Point(x, y));
}
}
// Return all the matching neighbors
return result;
}
我希望model字段可以根据字典自动查找其值,如果找到匹配项,则将该字段的值设置为标准名称。如果找不到匹配项,则该字段应引发某种异常。
我尝试过的事情
选择字段-这不适用于我的用例,因为只能通过REST API修改模型。此外,API从3p来源接收数据,因此强制执行标准化客户端不是一种选择。
Django-Localflavor US -我尝试使用此程序包提供的自定义状态字段,但它仅实现了一个选择字段,不会自动标准化数据。
答案 0 :(得分:0)
首先,我将规范值保存在一个模型中,并将可能的变化保存在另一个模型中,其中外键指向规范值。
在表单验证期间(或者,如果以不同的方式获取数据,则可能在pre_save中),您可以在变化模型中查找输入值;如果找到,则将值更改为标准值,如果找不到,则引发错误。