生成一个字段中可以有多个值的 Django 模型

Generating a Django Model that can have multiple values in one field

我正在尝试生成一个可以在单个字段中处理多个值的 Django 模型。因此,当通过视图查询第一个字段时,用户应该通过 select 框 select 第二个字段的值。

为了说明问题的背景,我的播种夹具如下所示...

[
  {
    "model":"myapp.location",
    "pk":1,
    "fields":{
      "county": "countyname",
      "places":{
        "name": "placename",
        "name": "placename",
        "name": "placename",
        "name": "placename",
        "name": "placename"
      }
    }
}
]

在上面的场景中,location 是我的模型的预期名称。现在,通过一个表单,我希望向用户显示 'countynames'。在 select 输入县名后,应在 selected 县中向用户显示 'placenames' 供他们选择。

我试过以下格式的模型...


class Location(models.Model):
    county = models.CharField(max_length=100)
    places = models.CharField(max_length=100, choices=places.name)
    def __str__(self):
        return self.countyname

现在,我知道抛出的错误('places' 未定义)是有道理的。我在问是否有一种方法来定义它(位置),就像它在夹具中一样,或者是否有人对这种模型有更好的实现……欢迎和赞赏任何替代方法,因为我想不出在这一点上任何事情。

所以,按照上面评论中的建议摆弄了两个模型和外键后,我决定修改模型,这也导致更换夹具。我在 Postgres + Django here 中读到了 ArrayFields。我将字段 'places' 修改为 ArrayField,如下所示:

from django.contrib.postgres.fields import ArrayField

class Location(models.Model):
    county = models.CharField(max_length=100)
    places = ArrayField(models.CharField(max_length=100), blank=True)

    def __str__(self):
        return self.county

接下来,只需将 JSON 夹具更改为:

[
  {
    "model":"myapp.location",
    "pk":1,
    "fields":{
      "county": "countyname",
      "places":["placename","placename","placename","placename"]
    }
  }
]

运行python manage.py loaddata fixturename.json之后, 它起作用了,数据库被播种了!