列表字段中只能使用列表和元组验证错误

Only lists and tuples may be used in a list field Validation Error

您好,我正在为我的模型实施测试用例。 我正在使用 Mongoengine0.9.0 + Django 1.8

我的models.py

class Project(Document):
    # commented waiting for org-group to get finalize
    project_name = StringField()
    org_group = ListField(ReferenceField(OrganizationGroup, required=False))

我的Serializers.py

class ProjectSerializer(DocumentSerializer):

    class Meta:
        model = Project
        depth = 1

test.py 文件

def setUp(self):
    # Every test needs access to the request factory.
    self.factory = RequestFactory()
    self.user = User.objects.create_user(
        username='jacob', email='jacob@jacob.com', password='top_secret')



def test_post_put_project(self):
    """
    Ensure we can create new clients in mongo database.
    """
    org_group = str((test_utility.create_organization_group(self)).id)
    url = '/project-management/project/'
    data = {
        "project_name": "googer",
        "org_group": [org_group],
    }
    ##import pdb; pdb.set_trace()

    factory = APIRequestFactory()
    user = User.objects.get(username='jacob')
    view = views.ProjectList.as_view()

    # Make an authenticated request to the view...
    request = factory.post(url, data=data,)
    force_authenticate(request, user=user)
    response = view(request)
    self.assertEqual(response.status_code, 200)

当我 运行 测试用例时,我收到此错误

(Only lists and tuples may be used in a list field: ['org_group'])

完整的堆栈跟踪是

ValidationError:调用 Project.objects.create() 时出现 ValidationError。 这可能是因为请求数据满足序列化器验证但不满足 Mongoengine 的。 您可能需要检查 Project 和 ProjectSerializer 之间的一致性。

如果不是这种情况,请在 https://github.com/umutbozkurt/django-rest-framework-mongoengine/issues

上就此问题开工单

原始异常是:ValidationError(项目:None)(列表字段中只能使用列表和元组:['org_group'])

不明白为什么我们不能像这样传递对象。

当我作为对相同方法的请求发布时,同样的事情对我有用,但测试用例失败了

测试应该 运行 使用 multipart/form-data,这意味着它们不支持列表或嵌套数据。

您可以 override this with the format argument,我猜您可能想将其设置为 json。很可能您的前端正在使用 JSON,或支持列表的解析器,这解释了为什么您看不到这个。