Python 不同的结果后序列化取决于环境
我从rest web json表单和custom_answers字段发送请求,其中包含转换后的列表数据,但当我使用ApiClient从测试发送相同的数据时,custom_answers null listPython 不同的结果后序列化取决于环境,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
从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')