代码之家  ›  专栏  ›  技术社区  ›  ha22109

如何在Django中使用数组

  •  2
  • ha22109  · 技术社区  · 16 年前

    我有一个DB表,它有一个整数数组。但是如何在我的模型中添加这个字段呢?我试着用 IntegerField 但一经保存它就出错了

    int() argument must be a string or a number, not 'list
    

    如何将此字段添加到我的模型中?我在views.py中使用此字段,因此需要将其添加到我的模型中。有什么建议吗?

    4 回复  |  直到 13 年前
        1
  •  7
  •   Dominic Rodger    16 年前

    您可能对使用 CommaSeparatedIntegerField .

    如果你有一个这样的整数列表:

    my_ints = [1,2,3,4,5]
    

    像这样的模型:

    class MyModel(models.Model):
        values = CommaSeparatedIntegerField(max_length = 200)
    

    然后你可以保存 my_ints 变成一个 MyModel 这样地:

    m = MyModel(values = ','.join(my_ints))
    m.save()
    
        2
  •  1
  •   Clueless    16 年前

    我会调查 database normalization . 尤其是,您的数据库甚至不是第一个正常形式,也不是最重要的一个正常形式,它表示规范化数据不应该包含任何重复组。因此,Django对象关系映射器将很难为数据建模。

    通过只支持单一的、不重复的类型,django在某种意义上加强了数据中的第一种正常形式。您可以尝试编写自己的SQL来管理这个特定的字段,或者在Internet上找到一些代码,但最好是在自己的模型中将这个字段重构为多对一关系。您可以在上面找到Django文档 here .

        3
  •  1
  •   Tomasz Zieliński    16 年前

    答案可能是你能得到的最好的答案,但如果你仍然想在单个字段中存储数字数组,你可以这样做-要么手动,例如酸洗它,然后存储到textfield,或者通过编写自定义模型字段,自动为你做类似的事情。

    这是医生: http://docs.djangoproject.com/en/1.1/howto/custom-model-fields/

        4
  •  1
  •   ha22109    16 年前

    我通过在我的模型中说textfield来实现它,因为我只使用这个字段来阅读它不会影响我。