Django SQLite更新(Django SQLite UPDATE)

编程入门 行业动态 更新时间:2024-10-26 06:27:10
Django SQLite更新(Django SQLite UPDATE)

我正在使用django开发一个webapp。 通常,我想跟踪用户投入项目的时间。 因此,当用户开始工作时,我在数据库中注册了一个“更改”对象,包括用户,项目以及他开始工作的时间。 现在,如何将相同的“更改”对象转换为不同的视图以记录结束时间? 在我最好的尝试中,我得到了“IntegrityError NOT NULL约束失败”。 这是代码:

views.py

@login_required def main(request): context = RequestContext(request) user=request.user if request.method=='POST': projectid=request.POST['project'] project = Project.objects.get(pk=int(projectid)) if project: change=Change(user=user, project=project,starttime=datetime.now()) change.save() #return HttpResponse("I \'ve already start counting... You \'ve wasted 5 seconds already. Just joking. I don\'t know how to count...") return render_to_response('ProjectLogging/timer.html', {'change':change}, context_instance=RequestContext(request)) else: HttpResponse("Choose a valid project!") else: HttpResponse("Choose a POST method (???????)") @login_required def timer(request, change): user=request.user # schange=request.change if request.method=='POST': change=Change(endtime=datetime.now()) change.save() return render_to_response('ProjectLogging/main.html',{'user':user, 'project_list':Project.objects.all()}, context_instance=RequestContext(request)) else: return HttpResponse("Something went wrong with timer view.")

urls.py

urlpatterns=patterns('ProjectLogging', url(r'^$', 'views.login', name="index"), url(r'^login/$', 'views.login', name="login"), url(r'^logout/$', 'views.logout', name="logout"), url(r'^main/$','views.main', name="main"), url(r'^timer/$', 'views.timer', {'change':'change'}), )

改变模型

class Change(models.Model): user=models.ForeignKey(User) project=models.ForeignKey('Project') starttime=models.DateTimeField(null=True,blank=True) endtime=models.DateTimeField(null=True, blank=True) flagged=models.BooleanField(default=False, db_index=True) def __repr__(self): return ('Change in project %r from %r' % (self.project.title, self.user.username)) def __unicode__(self): return ('%r in project: %r' % (self.user.get_full_name(), self.project.title)) def user_changes(self, user): return self.filter(user==user)

抱歉原始代码。 我是Django和Python的新手。

I am developing a webapp using django. Generally, I want to keep track of how much time a user has devoted to a project. So when the user starts working, I am registering a "Change" object in the database with the user, the project, and what time he start working. Now, how can I get the same "Change" object to a different view to log the end time? In my best attempt I got an "IntegrityError NOT NULL constraint failed". Here is the code:

views.py

@login_required def main(request): context = RequestContext(request) user=request.user if request.method=='POST': projectid=request.POST['project'] project = Project.objects.get(pk=int(projectid)) if project: change=Change(user=user, project=project,starttime=datetime.now()) change.save() #return HttpResponse("I \'ve already start counting... You \'ve wasted 5 seconds already. Just joking. I don\'t know how to count...") return render_to_response('ProjectLogging/timer.html', {'change':change}, context_instance=RequestContext(request)) else: HttpResponse("Choose a valid project!") else: HttpResponse("Choose a POST method (???????)") @login_required def timer(request, change): user=request.user # schange=request.change if request.method=='POST': change=Change(endtime=datetime.now()) change.save() return render_to_response('ProjectLogging/main.html',{'user':user, 'project_list':Project.objects.all()}, context_instance=RequestContext(request)) else: return HttpResponse("Something went wrong with timer view.")

urls.py

urlpatterns=patterns('ProjectLogging', url(r'^$', 'views.login', name="index"), url(r'^login/$', 'views.login', name="login"), url(r'^logout/$', 'views.logout', name="logout"), url(r'^main/$','views.main', name="main"), url(r'^timer/$', 'views.timer', {'change':'change'}), )

and the Change model

class Change(models.Model): user=models.ForeignKey(User) project=models.ForeignKey('Project') starttime=models.DateTimeField(null=True,blank=True) endtime=models.DateTimeField(null=True, blank=True) flagged=models.BooleanField(default=False, db_index=True) def __repr__(self): return ('Change in project %r from %r' % (self.project.title, self.user.username)) def __unicode__(self): return ('%r in project: %r' % (self.user.get_full_name(), self.project.title)) def user_changes(self, user): return self.filter(user==user)

Sorry for the primitive code. I m new to both Django and Python.

最满意答案

错误在这里:

change=Change(endtime=datetime.now()) change.save()

您正在尝试创建一个新对象...

相反,您需要获取之前创建的并保存它。

你需要将id传递给帖子,获取对象并再次保存:

change = Change.objects.get(id=change_id) change.endtime=datetime.now() change.save()

这就是我要做的:

从这里改变网址

url(r'^timer/$', 'views.timer', {'change':'change'}),

对此:

url(r'^timer/$', 'views.timer', name='timer'),

将表单中的change_id作为隐藏输入传递。 由于你没有使用django Forms,你必须写这个

<input type="hidden" value="{{ change.id }}" name="change_id" />

将计时器功能更改为:

@login_required def timer(request): ... if request.method=='POST': try: change = Change.objects.get(id=request.POST.get('change_id')) change.endtime=datetime.now() change.save() except: ...

应该没问题

the error is here:

change=Change(endtime=datetime.now()) change.save()

You are trying to create a new object...

Instead you need to get the previous created one and save it.

you need to pass the id to the post , get the object and save it again:

change = Change.objects.get(id=change_id) change.endtime=datetime.now() change.save()

This is what I would do:

change the url from this

url(r'^timer/$', 'views.timer', {'change':'change'}),

to this:

url(r'^timer/$', 'views.timer', name='timer'),

Pass the change_id in the form as a hidden input. Since you're not using django Forms, you'll have to write this

<input type="hidden" value="{{ change.id }}" name="change_id" />

Change the timer function to this:

@login_required def timer(request): ... if request.method=='POST': try: change = Change.objects.get(id=request.POST.get('change_id')) change.endtime=datetime.now() change.save() except: ...

that should be ok

更多推荐

本文发布于:2023-08-05 04:35:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1428631.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Django   SQLite   UPDATE

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!