Django自动标准化模型字段

时间:2019-02-24 18:56:21

标签: python django django-models django-rest-framework

我正在尝试为美国创建一个模型字段,该字段可在我的应用程序中跨多个模型使用。我有一本常见国家缩写词和拼写字典,与相应的标准化名称集匹配-例如

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 -我尝试使用此程序包提供的自定义状态字段,但它仅实现了一个选择字段,不会自动标准化数据。

1 个答案:

答案 0 :(得分:0)

首先,我将规范值保存在一个模型中,并将可能的变化保存在另一个模型中,其中外键指向规范值。

在表单验证期间(或者,如果以不同的方式获取数据,则可能在pre_save中),您可以在变化模型中查找输入值;如果找到,则将值更改为标准值,如果找不到,则引发错误。