1
我正在Django中实现一个项目。简而言之,用户和项目以及哪些用户在哪个项目上工作的日志(称为Change)。问题是,排除第一次用户进行更改(与项目无关),我得到一个UNIQUE constraint failed
错误。正如您将看到change.user_id中的验证失败。但这不是自SQLite自动声明的主键。
注意:我使用Django内置用户模型。
错误日志:Django/SQLite用户模型UNIQUE约束失败
Traceback:
File "C:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python34\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "C:\Users\George II\OneDrive\IC3D Media\ProjectLogging\views.py" in main
42. change.save()
File "C:\Python34\lib\site-packages\django\db\models\base.py" in save
589. force_update=force_update, update_fields=update_fields)
File "C:\Python34\lib\site-packages\django\db\models\base.py" in save_base
617. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "C:\Python34\lib\site-packages\django\db\models\base.py" in _save_table
698. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "C:\Python34\lib\site-packages\django\db\models\base.py" in _do_insert
731. using=using, raw=raw)
File "C:\Python34\lib\site-packages\django\db\models\manager.py" in manager_method
92. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python34\lib\site-packages\django\db\models\query.py" in _insert
921. return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Python34\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
920. cursor.execute(sql, params)
File "C:\Python34\lib\site-packages\django\db\backends\utils.py" in execute
81. return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python34\lib\site-packages\django\db\backends\utils.py" in execute
65. return self.cursor.execute(sql, params)
File "C:\Python34\lib\site-packages\django\db\utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python34\lib\site-packages\django\utils\six.py" in reraise
658. raise value.with_traceback(tb)
File "C:\Python34\lib\site-packages\django\db\backends\utils.py" in execute
65. return self.cursor.execute(sql, params)
File "C:\Python34\lib\site-packages\django\db\backends\sqlite3\base.py" in execute
485. return Database.Cursor.execute(self, query, params)
Exception Type: IntegrityError at /main/
Exception Value: UNIQUE constraint failed: ProjectLogging_change.user_id
models.py:
from django.db import models
from sqlalchemy.dialects.sqlite import BOOLEAN
from django.contrib.auth.models import User
class Project(models.Model):
title=models.CharField(max_length=200,db_index=True)
def get_id(self):
try:
return unicode(self.id)
except NameError:
return str(self.id)
def __repr__(self):
return ('Project %r: %r' % (str(self.id), self.title))
def __unicode__(self):
return ('Project %r: %r' % (str(self.id), self.title))
class Change(models.Model):
user=models.OneToOneField(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 user_changes(self, user):
return self.filter(user==user)
相应查看:
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.")
else:
HttpResponse("Choose a valid project!")
else:
HttpResponse("Choose a POST method (???????)")
这是很明显,我我对Django和python非常陌生。所以相应地表现出来。感谢您的时间。
我正要写!好一个。 – brunofitas 2015-03-19 10:55:57
感谢您澄清这个非常基本的细节! – 2015-03-19 12:18:26