不能使用 Djongo 模型中的 ArrayField

Cannot use ArrayField from Djongo Models

我正在尝试使用 MongoDB 作为我的数据库引擎使用 Django 制作一个应用程序,因此我使用 Djongo 作为 ORM。 在我的模型中,我定义了一个客户端 class,它旨在包含一组配置文件(授权人员以客户端的名义登录)。

Djongo Documentation中,它说可以在模型中使用ArrayField class来将数组存储到数据库中。关键是我遵循了文档中的示例(即使我试图在不更改任何内容的情况下进行复制)并且它不起作用。当 运行 视图时,我总是得到这个错误:

“值:配置文件对象 (None) 必须是 ”的实例“

我有以下 models.py:

from django import forms
from djongo import models

class Profile(models.Model):
    _id=models.ObjectIdField()

    fname = models.CharField(max_length=25)
    lname = models.CharField(max_length=50)
    email = models.EmailField()
    password = models.CharField(max_length=16)

    class Meta:
        abstract=True

class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields =(
            'fname', 'lname', 'email', 'password',
        )

class Client(models.Model): #informacion del cliente
    _id = models.ObjectIdField()
    name = models.CharField(max_length=256)
    authorized = models.ArrayField(
        model_container=Profile,
        model_form_class=ProfileForm
    )

    objects = models.DjongoManager()

class ClientForm(forms.ModelForm):
    class Meta:
        model = Client
        fields = (
            'name', 'authorized'
        )

我有一个使用 ClientForm 的表单,并且视图正确呈现。但是,当提交表单时,我得到了我在开始时所说的错误。我搜索了整个互联网,但不知道是什么导致了这个问题。

几天前我遇到了类似的错误,我试图将一个对象(在你的例子中是 Profile)直接存储到 ArrayField,我试图做类似的事情:

client = Client.object.first()
client.authorized = {

    'fname': form.validated_data['first name'],
    'last': form.validated_data['last name'],
    'email': form.validated_data['email'],
    'password': form.validated_data['Password'],
}
client.save()

正确的做法是:

client = Client.object.first()
    client.authorized = [{
    
        'fname': form.validated_data['first name'],
        'last': form.validated_data['last name'],
        'email': form.validated_data['email'],
        'password': form.validated_data['Password'],
    }]
    client.save()

您需要通过将其包裹在 []

周围来将其存储为 list 对象

这就是我解决问题的方法,我认为你的情况类似,试试上面的解决方案,如果它不起作用,也许你应该分享更多细节,比如你的 views.py