Djongo重新定义了ArrayModelField的结构

Posted

技术标签:

【中文标题】Djongo重新定义了ArrayModelField的结构【英文标题】:Djongo redefine the structure of ArrayModelField 【发布时间】:2019-04-02 06:15:12 【问题描述】:

我使用Djongo 定义ArrayModelField。看起来不错,但ArrayModelField 的问题是我只能将它添加为对象数组,而不仅仅是平面列表。有什么方法可以将它添加为平面列表

示例:

# models.py
from djongo import models

class Option(models.Model):
    option = models.CharField(max_length=100)

    class Meta:
        abstract = True

    def __str__(self):
        return self.option

class Quiz(models.Model):
    _id = models.ObjectIdField()
    question = models.TextField(null=True, blank=True)
    options = models.ArrayModelField(model_container=Option)
    answers = models.ArrayModelField(model_container=Option)

使用这个我可以创建一个如下的文档,

但是我想保存成这种格式,

我也希望在 Django 管理面板 中解析视图。

我现在有什么办法可以做到这一点吗?

提前致谢。

【问题讨论】:

我不明白为什么你需要一个单独的模型,如果这是你想要的格式。为什么不是简单的 ArrayField? 我认为 ArrayField 是 Postgres 特有的。无论如何,我在 Djongo 中找不到 ArrayField 【参考方案1】:

在 Djongo 的最新版本中,如果你想自动支持管理面板,这种结构仍然是不可能的。话虽如此,您始终可以使用ListField 并为管理面板编写自定义视图,这是目前有效的解决方案。也看不到开发人员将在其中修复的任何时间表。

【讨论】:

【参考方案2】:

使用列表字段:

options = models.ListField()

【讨论】:

感谢您的回答,科布。不幸的是,我认为,这在 Django 管理面板中没有得到解析。我希望在管理面板中查看此内容。 为了能够在管理面板中查看它,您必须定义 ModelForm 类。在这里你可以看到如何做到这一点:djongo.readthedocs.io/docs/list-field 是的!但是,如果 ModelForm 类是平面列表,则它不起作用。 你是对的。我最近遇到了同样的问题,但切换到 ArrayField 似乎工作正常。请检查:***.com/a/53811152 非常感谢,科布!会检查出来。

以上是关于Djongo重新定义了ArrayModelField的结构的主要内容,如果未能解决你的问题,请参考以下文章

将 Djongo (Mongo ORM) 与 CosmosDB 一起使用?

Djongo操作MongoDB新增字段

将 djongo (Mongo ORM) 集成到 Django Rest 框架中

Djongo操作MongoDB新增字段

Djongo操作MongoDB新增字段

Django 与 Djongo,EmbeddedFields 返回模型尚未加载