【问题标题】:Model Array in DjangoDjango中的模型数组
【发布时间】:2017-04-02 04:25:32
【问题描述】:

我是 Django 新手,我正在尝试建模类似的东西:

值:"Field":[ { "opt1":val1, "opt2":val2}, { "opt1":val1, "opt2":val2}].

class Test(models.Model):
    Name = models.TextField(required=True)
    Specialty = models.????

我应该写什么? 附:我使用 MongoDB 作为数据库和 PyMongo

【问题讨论】:

    标签: django mongodb django-models mongodb-query pymongo


    【解决方案1】:

    我正在尝试建模类似:"Field":[ { "opt1":val1, "opt2":val2}, { "opt1":val1, "opt2":val2}]。

    Django 模型是关系数据库的包装器。关系数据库没有多值字段,它们使用关系代替 - 在这种情况下是一对多关系。 IOW,您需要在模型上使用 ForeignKey 的另一个模型,即:

    class Test(models.Model):
        name = models.TextField(required=True)
    
    class Option(models.Model):
        test = models.ForeignKey(Test, related_name="options")
        opt1 = models.CharField(...)
        opt2 = models.CharField(...)
    

    然后您可以通过test.options.XXX 访问您的选项,即:

    t = Test.objects.create(name="test")
    # list existing options
    print t.options.all() 
    # add an option
    t.options.create(opt1="foo", opt2="bar") 
    

    更多文档here 和 here....

    您也可以也使用一些可用的JSONField 实现,但在此过程中您会丢失很多东西(查询选项值 - 除非使用 PostgreSQL -、db 和 model级别约束等,自动管理和模型表单等)。

    【讨论】:

    • 哦,好吧......那么这是另一个问题 - 我无能为力。
    【解决方案2】:

    首先使用安装jsonfield

    pip install jsonfield 
    

    然后

    from jsonfield import JSONField    
    data = JSONField(blank=True, null=True)
    

    【讨论】:

    • 以及我可以通过哪种方式定义“opt1”、“opt2”等。如果您提供一些有关该做什么的详细信息应该会更好,因为我对 django 知之甚少,而且我无法查找 django+mongodb 的文档
    • 我没有补充说我正在使用 Mongo。所以这些答案与当前问题不一致
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2022-10-04
    • 2018-12-29
    • 2020-11-25
    相关资源
    最近更新 更多