Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django中的多值字段_Django - Fatal编程技术网

Django中的多值字段

Django中的多值字段,django,Django,我不敢相信这之前没有出现过,但是: 如果我希望我的模型有一个包含多个值的“基元”字段,我将如何声明它?例如,多个整数、字符串、布尔值或日期时间 我最初的想法是使用我的模型的FK和我提到的其中一个字段创建第二个模型: class MyModel(models.Model): pass class MyModelInteger(models.Model): integer = models.ForeignKey(MyModel) value = models.Integer

我不敢相信这之前没有出现过,但是:

如果我希望我的模型有一个包含多个值的“基元”字段,我将如何声明它?例如,多个整数、字符串、布尔值或日期时间

我最初的想法是使用我的模型的FK和我提到的其中一个字段创建第二个模型:

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)