我正在尝试使用单个字段在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
答案 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