在Django中创建一个数组字段

时间:2011-06-28 17:19:17

标签: python django arrays list

我需要创建一个存储Field的历史数据的模型,例如一个具有其答案字段的民意调查,以便它可以用它来制作。 我正在寻找ManytoMany领域,但它太笼统了,感觉就像我为了简单的事情做了太多。

5 个答案:

答案 0 :(得分:1)

Django 1.8支持PostgreSQL特定的ArrayField type

from django.db import models
from django.contrib.postgres.fields import ArrayField

class ChessBoard(models.Model):
    board = ArrayField(
        ArrayField(
            models.CharField(max_length=10, blank=True),
            size=8,
        ),
        size=8,
    )

答案 1 :(得分:0)

如果您只想存储模型的先前版本,可以使用django-reversion,它可以为Django模型添加版本控制工具(允许您保存修订,回滚更改等)。

答案 2 :(得分:0)

我们正在使用django-auditlog来完成Django通过管理员记录更改的内容。 https://github.com/Atomidata/django-audit-log 只需指定需要审核的任何模型即可实现。

class MyClass(models.Model):
    field1 = models.CharField(max_length=100, blank=True, db_index=True, null=True)
    field2 = models.BooleanField(blank=False,null=False,default=True)

    audit_log = AuditLog()

答案 3 :(得分:0)

我知道这不能直接回答问题,但是我查询了“ django create default arrayfield”,然后就到了。

因此,下面是一个使用默认值创建ArrayField的示例:

from django.contrib.postgres.fields import ArrayField

def default_thing():
    return ['THIS IS A DEFAULT']

class SomeModel(ParentModel):
    thing_to_export = ArrayField(models.CharField(max_length=50), 
                                 default=default_thing)

答案 4 :(得分:0)

我知道这似乎与直觉相反,但是您绝对希望使用从答案表到民意调查表的多对一(外键)之类的通用方法。您希望您的应用程序轻松增长以支持未来的想法,例如将元数据与这些答案-投票配对相关联,并能够有效地对该元数据进行查询,例如波特兰的人们对这个问题的回答。

如果您真的想要一个僵化,简单的DB模式,只需创建一个pks数组即可。但是不要试图使用仅Postgres的ArrayField。如果您希望Django模型与postgres(MySQL,MariaDB或sqlite)以外的后端一起使用,则需要将数组存储为字符串序列化。最简单的格式是json字符串,但是任何操作都可以,即使是csv。