首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Djongo模型中的ArrayField

无法使用Djongo模型中的ArrayField
EN

Stack Overflow用户
提问于 2021-03-15 20:02:12
回答 1查看 175关注 0票数 0

我正在尝试使用MongoDB作为我的数据库引擎来创建一个应用程序,所以我使用Djongo作为对象/对象模型。在我的模型中,我定义了一个Client类,它打算包含一个Profiles数组(授权用户以client的名称登录)。

Djongo Documentation中,它表示可以在模型中使用ArrayField类,以便将数组存储到数据库中。重点是,我遵循了文档中的示例(即使我尝试复制而不做任何更改),但它不起作用。在运行视图时,我总是得到这样的错误:

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

我有以下models.py:

代码语言:javascript
复制
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的表单,视图可以正确呈现。然而,在提交表单时,我得到了我在开始时所说的错误。我搜索了整个互联网,并不知道是什么导致了这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-21 17:26:43

几天前我遇到了一个类似的错误,我试图将一个对象(在你的例子中是它的配置文件)直接存储到ArrayField中,我试图这样做:

代码语言:javascript
复制
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()

正确的方法是:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66637614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档