Django中的多值字段
我不敢相信这之前没有出现过,但是: 如果我希望我的模型有一个包含多个值的“基元”字段,我将如何声明它?例如,多个整数、字符串、布尔值或日期时间 我最初的想法是使用我的模型的FK和我提到的其中一个字段创建第二个模型:Django中的多值字段,django,Django,我不敢相信这之前没有出现过,但是: 如果我希望我的模型有一个包含多个值的“基元”字段,我将如何声明它?例如,多个整数、字符串、布尔值或日期时间 我最初的想法是使用我的模型的FK和我提到的其中一个字段创建第二个模型: class MyModel(models.Model): pass class MyModelInteger(models.Model): integer = models.ForeignKey(MyModel) value = models.Integer
class MyModel(models.Model):
pass
class MyModelInteger(models.Model):
integer = models.ForeignKey(MyModel)
value = models.IntegerField()
但是(i)这是否证明使用第二个表是合理的?(ii)如何直接从MyModel
访问整数值?我不能通过使用选项,因为它适用于中间关联模型,而不适用于简单属性
我可能想得太多了,但令人惊讶的是,就我的记忆而言,我还没有遇到过这种情况,所以我希望能得到一些帮助来解决这个问题。是的,考虑到整数的顺序在这里并不重要,而且这些数字是“实体”,你可以这样做
您可以通过以下方式获取项目:
class MyModel(models.Model):
def my_integers():
return self.mymodelinteger_set.values_list('value', flat=True)
class MyModelInteger(models.Model):
integer = models.ForeignKey(MyModel)
value = models.IntegerField()
但是,如果您只想在模型中存储一些数字,而不必对这些数字进行过滤,那么上述操作可能会有些过头。在这种情况下,您可以使用(这是PostgreSQL的一个特定选项),或者可以使用非PostgreSQL
因此,您可以将普通Python对象作为JSON存储在数据库中,对于可以动态结构化的少量数据来说,这通常是一个好主意,并且不需要过滤器(在PostgreSQL的情况下,您可以过滤)
然后你可以像这样使用它:
from jsonfield import JSONField
# or for PostgreSQL
# from django.contrib.postgres.fields import JSONField
class MyModel(models.Model):
integers = JSONField(default=list)
从jsonfield导入jsonfield
#还是PostgreSQL
#从django.contrib.postgres.fields导入JSONField
类MyModel(models.Model):
整数=JSONField(默认值=list)
from jsonfield import JSONField
# or for PostgreSQL
# from django.contrib.postgres.fields import JSONField
class MyModel(models.Model):
integers = JSONField(default=list)