Django一对一关系IntegrityError:UNIQUE约束失败

时间:2018-03-01 11:35:00

标签: django django-models

我想建立一个为其用户创建14周疗程的网站。 该课程/疗法与用户和治疗师具有一对一的关系。与每周会议模型的多对一关系。当我在没有创建每周会话的情况下创建课程时,一切正常。但是当我添加用于创建每周会话的代码时(在相同的视图函数中),它会显示完整性错误。

models.py:

 class Therapist(models.Model):
  name = models.CharField(max_length=20)
  phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
  contact = models.CharField(validators=[phone_regex], max_length=17,blank=True) 
  region=models.CharField(max_length=30,default='online')
  def __unicode__(self):
    return self.name

  class UserProfile(models.Model):
   user = models.OneToOneField(User)
   phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
   phone = models.CharField(validators=[phone_regex],max_length=17,blank=True)
  age=models.IntegerField()
  region=models.CharField(max_length=30)
  def __unicode__(self):
    return self.user.username
  def get_region(self):
    return self.region

 class CBT_therapy(models.Model):
  """docstring for CBT_therapy : has one to one relationship with user and therapist.
   Many to one relation with weekly session.
  """
   start_date = models.DateField()
   session_time=models.TimeField()
   therapist=models.OneToOneField(Therapist)
   user=models.OneToOneField(User,on_delete=models.CASCADE)

class WeeklySession(models.Model):
  session_date=models.DateField()
  session_time=models.TimeField()
  week_no = models.IntegerField()
  challenge=models.CharField(max_length=150)
  therapy = models.ForeignKey(CBT_therapy)


class Challenge(models.Model):
  title=models.CharField(max_length=150)
  def __unicode__(self):
    return self.title

Views.py:

def registerCBT(request):
 if request.method == 'POST':
    register_form = RegisterCBTForm(request.POST or None)
    if register_form.is_valid():
        start_date=register_form.cleaned_data['start_date']
        session_time=register_form.cleaned_data['session_time']
        user=request.user
        username=UserProfile.objects.get(user=user)
        region=username.get_region()
        try:
            therapist_name=Therapist.objects.get(region=region)
        except : 
            therapist_name=Therapist.objects.get(region='online')
        cbt=CBT_therapy(
            user=user,
            start_date=start_date,
            session_time=session_time,
            therapist=therapist_name
            )
        cbt.save(force_insert=True)
        session_date=start_date
        for challenge in Challenge.objects.all():
            session_date = session_date + timedelta(days=7)
            w=WeeklySession(
                 session_time =session_time,
                 session_date =session_date,
                 week_no=challenge.pk,
                 challenge=challenge.title,
                 therapy=cbt
                )
            w.save(force_insert=True)
   else:
     register_form = RegisterCBTForm()
   return render(request,'register_for_cbt.html',{'register_form':register_form})

追溯:

  Traceback (most recent call last):
  File "/home/tux/yes/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute
  return self.cursor.execute(sql, params)
  File "/home/tux/yes/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
  return Database.Cursor.execute(self, query, params)
  sqlite3.IntegrityError: UNIQUE constraint failed: CBT_cbt_therapy.therapist_id

  The above exception was the direct cause of the following exception:

  Traceback (most recent call last):
  File "/home/tux/yes/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
  response = get_response(request)
  File "/home/tux/yes/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
   response = self.process_exception_by_middleware(e, request)
  File "/home/tux/yes/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
   response = wrapped_callback(request, *callback_args, **callback_kwargs)
   File "/home/tux/frames/CBT_therapy/CBT/views.py", line 63, in registerCBT
   cbt.save(force_insert=True)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/base.py", line 807, in save
   force_update=force_update, update_fields=update_fields)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/base.py", line 837, in save_base
   updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/base.py", line 923, in _save_table
   result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/base.py", line 962, in _do_insert
   using=using, raw=raw)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
   return getattr(self.get_queryset(), name)(*args, **kwargs)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/query.py", line 1076, in _insert
   return query.get_compiler(using=using).execute_sql(return_id)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1107, in execute_sql
   cursor.execute(sql, params)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute
   return super(CursorDebugWrapper, self).execute(sql, params)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute
   return self.cursor.execute(sql, params)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__
   six.reraise(dj_exc_type, dj_exc_value, traceback)
   File "/home/tux/yes/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
   raise value.with_traceback(tb)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute
   return self.cursor.execute(sql, params)
   File "/home/tux/yes/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
    return Database.Cursor.execute(self, query, params)
    django.db.utils.IntegrityError: UNIQUE constraint failed: CBT_cbt_therapy.therapist_id

0 个答案:

没有答案