不能使用 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
我正在尝试使用 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