Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不同的结果后序列化取决于环境_Python_Django_Django Rest Framework - Fatal编程技术网

Python 不同的结果后序列化取决于环境

Python 不同的结果后序列化取决于环境,python,django,django-rest-framework,Python,Django,Django Rest Framework,我从rest web json表单和custom_answers字段发送请求,其中包含转换后的列表数据,但当我使用ApiClient从测试发送相同的数据时,custom_answers null list 从restf web json表单打印已验证的_数据创建序列化程序方法 {'custom_answers': [OrderedDict([('user', <SimpleLazyObject: <User: 123>>), ('question', <Quest

我从rest web json表单和custom_answers字段发送请求,其中包含转换后的列表数据,但当我使用ApiClient从测试发送相同的数据时,custom_answers null list


从restf web json表单打印已验证的_数据创建序列化程序方法

{'custom_answers': [OrderedDict([('user', <SimpleLazyObject: <User: 123>>), ('question', <Question: Вопрос 2>), ('text', 'TExt')]), OrderedDict([('user', <SimpleLazyObject: <User: 123>>), ('question', <Question: Вопрос 1>), ('text', 'tes')])], 'poll': <Poll: Опрос 1>, 'user': <SimpleLazyObject: <User: 123>>}

对不起我的英语

序列化程序.py

class CustomUserAnswerSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(
        read_only=True,
        default=CurrentUserDefault()
    )

    class Meta:
        model = CustomUserAnswer
        fields = ('user', 'question', 'text')


class CompletedPollSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(
        read_only=True,
        default=CurrentUserDefault()
    )
    custom_answers = CustomUserAnswerSerializer(
        many=True, write_only=True, required=False      
    )

    class Meta:
        model = CompletedPoll
        fields = ('poll', 'user', 'custom_answers')

    def create(self, validated_data):
        print(validated_data)
models.py---模型之间不相关

class CompletedPoll(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        related_name='ended_polls'
    )
    poll = models.ForeignKey(Poll)
    ended_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ('-ended_date',)
        unique_together = ('user', 'poll')


class CustomUserAnswer(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        related_name='custom_answers'
    )
    question = models.ForeignKey(
        Question,
        related_name='custom_answers'
    )
    text = models.CharField(
        verbose_name='Текст ответа',
        max_length=800
    )

    class Meta:
        unique_together = ('user', 'question')
tests.py

class ApiPollsTestCase(APITestCase):
    def setUp(self):
        call_command('loaddata', 'polls/fixtures/polls')

    self.user = User.objects.create(
        username='123',
        password='123',
        email='123@123.ru'
    )

    self.client = APIClient()
    self.client.credentials(
        HTTP_AUTHORIZATION='Token ' + self.user.auth_token.key
    )

    def test_complete_poll(self):
        data = {
            'poll': 1,
            'custom_answers': [
                {'question': 2, 'text': 'TExt'},
                {'question': 1, 'text': 'tes'}
            ]
        }

        response = self.client.post(reverse('api_v1:complete-poll'), data)
        print(CustomUserAnswer.objects.all(), response.data)
        self.assertEqual(response.status_code, 201)
        self.assertTrue(
            CompletedPoll.objects.filter(
                user=self.user, poll__id=data['poll']
            ).exists()
        )

您发送的数据的默认内容类型是不支持嵌套数据的html表单

您需要明确指出您正在发送json数据:

{custom_answers': [{'text': 'TExt', 'question': 2}, {'text': 'tes', 'question': 1}], 'poll': 1}
response = self.client.post(reverse('api_v1:complete-poll'), data, format='json')

您发送的数据的默认内容类型是不支持嵌套数据的html表单

您需要明确指出您正在发送json数据:

{custom_answers': [{'text': 'TExt', 'question': 2}, {'text': 'tes', 'question': 1}], 'poll': 1}
response = self.client.post(reverse('api_v1:complete-poll'), data, format='json')