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