首页 > 解决方案 > 在 Django Admin 中使用 Djongo 的 ArrayField

问题描述

Djongo是一个Django 和 MongoDB 数据库连接器,除了其他之外,它还为 Django 模型带来了ArrayField 。它允许将另一个实例的多个实例存储djongo.models.Model在一个唯一的MongoDB 数组字段中,该字段与Model具有Arrayfield

如源文档中所述:“容器的模型必须声明为抽象的,因此不应被视为它自己的集合。”

以及在djongo 的站点教程中 “如果您不打算将嵌入式模型用作独立模型(这意味着它将始终嵌入到父模型中),您应该添加class Metaandabstract = True这样 Djongo 将永远不会注册此模型作为一个实际的模型。”

我这样制作:

# models.py

class Contact(models.Model):
    key = models.CharField(max_length=100)

    class Meta:
        abstract = True

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ('key',)

class Person(models.Model):
    _id = models.ObjectIdField()
    ...
    contact = models.ArrayField(
        model_container=Contact,
        model_form_class=ContactForm,
    )

    objects = models.DjongoManager()
# admin.py

admin.site.register(Person)
$ pip freeze
Django==3.2.4
djongo==1.3.6
pymongo==3.11.4
...

但是,当我尝试Person通过 Django Admin 添加一个(在 /admin/<app>/person/add/ 中)我收到错误抽象模型无法.../django/db/models/base.py

这似乎与 Djongo 的描述不一致。难道我做错了什么?

标签: djangomongodbdjango-modelsdjango-admindjongo

解决方案


推荐阅读