什么是Django中的`save()`?

时间:2018-05-08 03:11:17

标签: django

我正在学习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是什么?

3 个答案:

答案 0 :(得分:1)

Django中的save()是什么?

send/sync/save数据库的对象 保存对象时,已触发以下步骤:

  1. pre_save signal(监听该信号执行的任何函数的时间)
  2. 预处理数据(调用pre_save方法的每个字段)

    即:例如,日期/时间字段覆盖pre_save()以实现auto_now_add和auto_now。

  3. 准备数据库的数据
  4. 将数据插入数据库
  5. 发出保存后信号(监听该信号执行的任何功能的时间)
  6. 来源:Django Official Documentation

答案 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方法是将您的数据(更新的数据)同步到您的数据库,而不会保存您无法在数据库中看到更新的数据。