#python #json #reactjs #django #rest
#python #json #reactjs #django #отдых
Вопрос:
У меня есть приложение React / Django, в котором пользователи могут отвечать на вопросы с несколькими вариантами ответов. У меня есть массив «choices», отображаемый в пользовательском интерфейсе в этом точном порядке.
{
"id": 2,
"question_text": "Is Lebron James the GOAT?",
"choices": [
{
"id": 5,
"choice_text": "No",
"votes": 0,
"percent": 0
},
{
"id": 4,
"choice_text": "Yes",
"votes": 1,
"percent": 100
}
],
}
Когда я выбираю выбор в режиме разработки, я отправляю запрос в Django, чтобы увеличить счетчик голосов для этого выбора, и он отправит ответ с обновленными голосами в том же порядке. порядок. Когда я пытаюсь выбрать вариант в рабочем режиме с помощью сборки npm run, порядок переключается.
{
"id": 2,
"question_text": "Is Lebron James the GOAT?",
"choices": [
{
"id": 4,
"choice_text": "Yes",
"votes": 1,
"percent": 50
},
{
"id": 5,
"choice_text": "No",
"votes": 1,
"percent": 50
}
]
}
Я думал, что порядок массива JSON должен быть сохранен. Кто-нибудь может объяснить, почему это происходит? Я почти уверен, что эта проблема возникает из Django. Вот представление функции в Django.
@api_view(['POST'])
def vote_poll(request, poll_id):
if request.method == 'POST':
poll = Poll.objects.get(pk=poll_id)
selected_choice = Choice.objects.get(pk=request.data['selected_choice_id'])
selected_choice.votes = 1
selected_choice.save()
poll_serializer = PollAndChoicesSerializer(poll)
return Response({ 'poll': poll_serializer.data })
Ответ №1:
Вам нужно установить ordering
параметр в выбранной вами модели Meta, если вы хотите иметь согласованный порядок.
class Choice(Smodels.Model):
class Meta:
ordering = ['-id']
Из документов:
Предупреждение
Упорядочение не является бесплатной операцией. Каждое поле, которое вы добавляете в порядок, влечет за собой затраты для вашей базы данных. Каждый добавляемый вами внешний ключ также будет неявно включать все его порядки по умолчанию.
Если в запросе не указан порядок, результаты возвращаются из базы данных в неуказанном порядке. Конкретный порядок гарантируется только при упорядочении по набору полей, которые однозначно идентифицируют каждый объект в результатах. Например, если поле имени не уникально, упорядочение по нему не гарантирует, что объекты с одинаковым именем всегда будут отображаться в одном и том же порядке.