我想建立一个为其用户创建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