Я реализую проект в Django. Вкратце, есть пользователи, а также проекты и журналы, из которых пользователь работал над каким проектом (называется «Изменить»). Проблема в том, что исключая первый раз, когда пользователь вносит изменения (не имеет значения для проекта), я получаю ошибку UNIQUE constraint failed
. Поскольку вы увидите, что проверка не выполняется в файле change.user_id. Но это не первичный ключ, так как SQLite объявляет его автоматически.
Примечание: Я использую пользовательскую модель Django.
Журнал ошибок:Django/SQLite Пользовательская модель UNIQUE constraint failed
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)
Соответствующий View:
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
Благодарим за разъяснение этой очень важной детали! –