在我的网站中,每个用户都有自己的登录ID和密码,因此如果用户登录,他只能添加,编辑和更新他的记录。
models.py是
class Report(models.Model):
user = models.ForeignKey(User, null=False)
name = models.CharField(max_length=20, null=True, blank=True)
views.py
def profile(request):
if request.method == 'POST':
reportform = ReportForm(request.POST)
if reportform.is_valid():
report = reportform.save(commit=False)
report.user = request.user
report.save()
return redirect('/index/')
else:
report = Report.objects.get()
reportform = ReportForm(instance=report)
return render_to_response('report/index.html',
{ 'form': reportform, },
context_instance=RequestContext(request))
用户应该有一个年龄,并且应该在数据库中的一行数据中。
就像场景“如果新用户创建了一个gmail帐户,他可以在第一时间创建帐户,并且他只能编辑和更新他们的详细信息”。同样的程序我想在我的网站上实施。
我用上面的代码尝试过,我无法在数据库中插入数据。我尝试直接插入mysql数据库并检查,因此我可以在可编辑模式下看到插入的数据,但如果我更改并保存,它将在db中创建另一行数据。
然后,如果我要第一次插入它,我会得到以下追溯。
Environment:
Request Method: GET
Request URL: http://192.168.100.10/report/index/
Django Version: 1.3.7
Python Version: 2.7.0
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'django.contrib.humanize',
'django.contrib.staticfiles',
'south',
'collect',
'incident',
'report_settings']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.transaction.TransactionMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware')
Traceback:
File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/root/Projects/ir/incident/views.py" in when
559. report = Report.objects.get()
File "/usr/lib/python2.7/site-packages/django/db/models/manager.py" in get
132. return self.get_query_set().get(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/django/db/models/query.py" in get
349. % self.model._meta.object_name)
Exception Type: DoesNotExist at report/index/
Exception Value: Report matching query does not exist.
答案 0 :(得分:0)
根据您显示的代码,您最可能的问题是Report
未保存到数据库中。您没有说过您正在使用的ReportForm
或与之一起使用的数据,但很可能以下部分永远不会执行:
if reportform.is_valid():
report = reportform.save(commit=False)
(...)
因此,没有保存任何报告。因此,当你到达这一行时:
report = Report.objects.get()
...你会得到你提到的追溯。我建议将.get()
替换为.all()
或.filter()
,因为当没有匹配的结果时,它们不会抛出异常。
要更新数据,您应该先从数据库中获取报表实例,然后将其传递给表单的save
函数:
report = Report.objects.filter(name=some_value)
report.user = request.user
reportform.save(instance=report)
答案 1 :(得分:0)
report = Report.objects.get()
reportform = ReportForm(instance=report)
我尝试在我的一个示例中运行一个空的.get(),它给了我类似的错误。 如果你试图让所有实体都尝试所有,那么只有让你返回一个独特的项目:
report = Report.ojbects.all()