我有一个React/Django应用程序,用户可以在这个应用程序中回答多个选择问题。我的“选择”数组按照这个顺序呈现到UI上。
{
"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选择生产模式时,订单就会被切换。
{
"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 })
发布于 2020-10-06 12:10:50
如果您想要有一致的顺序,您需要在选择模型Meta中设置ordering
选项。
class Choice(Smodels.Model):
class Meta:
ordering = ['-id']
从医生那里:
警告
订购不是免费的操作。添加到订单中的每个字段都会给数据库带来成本。您添加的每个外键也将隐式地包含其所有默认命令。
如果查询没有指定顺序,则将以未指定的顺序从数据库返回结果。只有当由一组字段唯一地标识结果中的每个对象进行排序时,才能保证特定的排序。例如,如果名称字段不是唯一的,则按其排序不能保证具有相同名称的对象始终以相同的顺序出现。
https://stackoverflow.com/questions/64233102
复制