小编Hus*_*ala的帖子

在使用 django restframework 多个数据库时,serializer.is_valid() 总是转到默认数据库进行验证

我正在使用 django restframework 并且想要处理多个数据库。我正在使用 django 函数 using(alias) 和 switch_db(alias) 在我想要获取、发布或更新数据时在数据库之间手动切换。

我在发布和更新 data.ie 时遇到问题,每当 serializer.is_valid() 将被调用。

serializer.is_valid() 将首先检查 model.py 文件中的 db_alias。如果我没有在 meta 下指定 db_alias,它将选择默认数据库进行验证。如果我在模型中指定 db_alias,它将选择该数据库进行验证。

但是我不想在模型中指定 db_alias 因为我的用例是根据我的视图文件中的某些逻辑将数据存储在不同的数据库中。所以动态地我想从视图中选择数据库并想在其中存储数据。

几乎我已经实现了,但是当我的模型具有参考字段时我遇到了问题。在这种情况下,serializer.is_valid 将转到默认数据库以验证该引用字段。

所需详细信息:我正在使用 mongoengine(0.9.0)、文档、文档序列化程序。

我的文件如下:

模型.py:

class ngroup(Document):

    groupname = StringField(max_length=100, required=True)
    description = StringField(max_length=100, required=False)
    parent = ReferenceField('ngroup',null=True)
    created_ts = DateTimeField(default=datetime.now())
    modified_ts = DateTimeField(default=datetime.now())
    is_deleted = BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

序列化程序.py:

from device_management.models import ngroup
from rest_framework_mongoengine.serializers import DocumentSerializer
from mongoengine import EmbeddedDocumentField, ReferenceField, StringField, ObjectIdField, IntField, BooleanField, FloatField, DateTimeField,ListField


class ngroupSerializer(DocumentSerializer):

    class Meta:
        model …
Run Code Online (Sandbox Code Playgroud)

python serialization mongoengine restframeworkmongoengine

7
推荐指数
1
解决办法
1733
查看次数