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

时间:2015-08-11 07:15:45

标签: django mongodb django-rest-framework mongoengine listfield

您好我正在为我的模型实施测试用例。 我使用的是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))

My 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:调用ValidationError时获得Project.objects.create()。 这可能是因为请求数据满足串行器验证但不满足Mongoengine的要求。 您可能需要检查Project和ProjectSerializer之间的一致性。

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

上打开有关此问题的故障单

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

不知道为什么我们不能传递这样的对象。

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

1 个答案:

答案 0 :(得分:1)

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

你可以override this with the format argument,我猜你可能想要设置为json。很可能你的前端使用的是JSON,或者是支持列表的解析器,这解释了为什么你没有看到这个。