例外值:全局名称' total_max_counter'没有定义

时间:2015-07-13 16:39:28

标签: django django-models

我正在尝试使用单个字段在MySQL数据库中创建一个新表来记录递增值。但是我一直收到错误:

  

例外值:全局名称' total_max_counter'未定义

有人能告诉我哪里出错了吗?

views.py

from survey.models import TotalCounter

def done(self, form_list, **kwargs):

    total_counter = TotalCounter.objects.get_or_create(total_max_counter)
    total_counter.survey_wizard_total += 1 
    total_counter.save()

    for form in form_list:
        form.save()

    return render(self.request, 'Return_to_AMT.html', {
        'form_data': [form.cleaned_data for form in form_list],            
    })

models.py

class TotalCounter(models.Model):

    total_max_counter = models.SmallIntegerField(default=0) 

    def __unicode__(self):
        return self  

2 个答案:

答案 0 :(得分:1)

首先,在get_or_create()中,您需要以kwargs的形式指定参数。然后,它将查找具有给定kwargs的对象,必要时创建一个对象。如果您的模型具有所有字段的默认值,则kwargs可能为空。

get_or_create()的功能定义是:

  

get_or_create(默认值=无,** kwargs)

其次,您尝试更新survey_wizard_total对象的TotalCounter字段,而您的模型中没有定义此类字段。它只包含字段total_max_counter。您还需要在代码中更正这一点。

这应该适合你:

from django.db.models import F
from survey.models import TotalCounter

def done(self, form_list, **kwargs):

    total_counter = TotalCounter.objects.get_or_create(total_max_counter__gte=0)[0] 
    total_counter.total_max_counter = F('total_max_counter') + 1 # increment value of `total_max_counter` by 1
    total_counter.save() # save the object

    for form in form_list:
        form.save()

    return render(self.request, 'Return_to_AMT.html', {
        'form_data': [form.cleaned_data for form in form_list],            
    })

答案 1 :(得分:0)

您正在以错误的方式使用get_or_create方法:

total_counter = TotalCounter.objects.get_or_create(total_max_counter)

您正在尝试从数据库中获取对象,但您没有进行任何比较。 它应该是这样的:

total_counter = TotalCounter.objects.get_or_create(total_max_counter=<some value to match against>)

即使在您的查询运行后进行此更正,也会返回一个没有属性的TotalCounter对象 survey_wizard_total &#39;

total_counter。 survey_wizard_total + = 1