0
我發送請求從其餘web json表單和custom_answers字段存在與轉換後的列表數據,但是當我從ApiClient,custom_answers空列表測試發送相同的數據。不同的結果後序列化取決於環境
打印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從測試的env創建串行方法從測試的env
{'custom_answers': [], 'poll': <Poll: Опрос 1>, 'user': <User: 123>}
打印串行INIT數據:
個<QueryDict: {'poll': ['1'], 'custom_answers': ["{'question': 2, 'text': 'TExt'}", "{'question': 1, 'text': 'tes'}"]}>
從Web打印串行數據初始化從JSON數據:
{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 :(謝謝你,幫我 – waynee