0
rest web jsonフォームからリクエストを送信し、custom_answersフィールドaは変換されたリストデータとともに存在しますが、ApiClientを使用してテストから同じデータを送信すると、custom_answers null list。環境に応じてシリアライズ後の結果が異なる
試験ENVから試験ENVから
{'custom_answers': [], 'poll': <Poll: Опрос 1>, 'user': <User: 123>}
印刷シリアライザ初期化データをシリアライザメソッドを作成validated_data restfウェブ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>>}
印刷シリアライザメソッドを作成validated_dataプリント:
JSONデータとから、ウェブから10の<QueryDict: {'poll': ['1'], 'custom_answers': ["{'question': 2, 'text': 'TExt'}", "{'question': 1, 'text': 'tes'}"]}>
印刷シリアライザのinitデータ:私の英語のための
{custom_answers': [{'text': 'TExt', 'question': 2}, {'text': 'tes', 'question': 1}], 'poll': 1}
申し訳ありません。
serializers.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='[email protected]'
)
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()
)
OMG、これは私を助けた:あなたが明示的にJSONデータを送っているに言及する必要が
– waynee