我正在学习Django并拥有以下代码:
ordering name
我对def vote(request, question_id):
question = get_object_or_404(Question, pk=question_id)
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
#Redisplay the question voting form
return render(request, 'polls/detail.html', {
'question':question,
'error_message':"You did'nt select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
感到困惑,作为一个简单的例子:
selected_choice.save()
在此过程中没有counter = 0
for counter in range(9):
counter += 1
print(counter)
操作。
Django中的save
是什么?
答案 0 :(得分:1)
Django中的save()是什么?
send/sync/save
数据库的对象
保存对象时,已触发以下步骤:
预处理数据(调用pre_save
方法的每个字段)
即:例如,日期/时间字段覆盖pre_save()以实现auto_now_add和auto_now。
答案 1 :(得分:0)
我开始上升一级。其他人说的都是真的,但我认为你可能会迷失在Django提出的抽象中。
你的get object_or_404是以下伪代码的抽象:
try:
question = Question.objects.get(pk=question_id) #grabing this row from the questions table in the db
except:
return 404 url
然后,您的示例将迭代selected_choice并递增该值,然后将其保存到db。简单的计数器反例只有一个不会更新数据库的打印语句。
冒着超越的风险,我建议从核心django教程开始 - 然后尝试更复杂的东西。我相信有更多的基础(我知道这是一项投资),基金会将在获得抽象方面获得好处。
答案 2 :(得分:0)
关键字参数只是您在模型上定义的字段的名称。请注意,实例化模型绝不会触及您的数据库;为此,你需要保存()。 因此,基本上,save方法是将您的数据(更新的数据)同步到您的数据库,而不会保存您无法在数据库中看到更新的数据。