I am new in django and i have a project based on django 1.6.X and i want to upgrade it to 1.11.X to add some features but when i did it i found many problems and i solved some of them but this one i don't know what to do with it, it gives me when i run it:
RuntimeError: Conflicting 'userprofile_roles' models in application 'survey': <class 'survey.models.UserProfile_roles'> and <class 'survey.models.Userprofile_Roles'>.
Full error_log:
Unhandled exception in thread started by <function wrapper at 0x7f2b1a21b140>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/utils/autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/core/management/commands/runserver.py", line 117, in inner_run
autoreload.raise_last_exception()
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/utils/autoreload.py", line 250, in raise_last_exception
six.reraise(*_exception)
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/utils/autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/apps/registry.py", line 108, in populate
app_config.import_models()
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/apps/config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/media/ahmed-mohamed/My Stuff/Work/AgileEngage.Sample/survey/models.py", line 255, in <module>
class Userprofile_Roles(models.Model):
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/db/models/base.py", line 325, in __new__
new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.3-py2.7.egg/django/apps/registry.py", line 224, in register_model
(model_name, app_label, app_models[model_name], model))
RuntimeError: Conflicting 'userprofile_roles' models in application 'survey': <class 'survey.models.UserProfile_roles'> and <class 'survey.models.Userprofile_Roles'>.
Can any one help me with it ? thanks alot.
Edit:
this is survey/models.py
from django.db import models
from stripogram import html2text
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.core import serializers
from datetime import datetime
class AnswerRange(models.Model):
title = models.CharField(max_length=200)
order = models.IntegerField(default=0)
def answers(self):
result = ""
for i in self.mcqanswer_set.all():
result += "," + i.title
return result[1:]
def __unicode__(self):
return self.title + '( ' + self.answers() + ' )'
def extar_mcq(self):
return serializers.serialize('python', self.mcqanswer_set.all())
class McqAnswer(models.Model):
answerrange = models.ForeignKey(AnswerRange)
title = models.CharField(max_length=200)
minValue = models.FloatField()
maxValue = models.FloatField()
def __unicode__(self):
return self.title
class Role(models.Model):
code = models.CharField(max_length=10)
title = models.CharField(max_length=200)
description = models.TextField()
rank=models.IntegerField(default=1)
def __unicode__(self):
return '[ %s ] %s ' % (self.code, self.title)
ANSWER_RANGE_DISPLAY_CHOICES = (
('sequence', 'sequence'),
('reverse', 'reverse'),
('random', 'random'),
)
ACTIVE_CHOICES = (
('include', 'No'),
('exclude', 'Yes'),
)
class Indicator(models.Model):
code = models.CharField(max_length=10)
roles = models.ManyToManyField(Role)
question = models.TextField()
answer_range = models.ForeignKey(AnswerRange)
answer_range_display = models.CharField(max_length=8, choices=ANSWER_RANGE_DISPLAY_CHOICES, default='sequence')
answers = models.ManyToManyField(User, through='Answer')
exclude = models.CharField(max_length=8, choices=ACTIVE_CHOICES, default='include')
def text(self):
return html2text(self.question)
def __unicode__(self):
return '[ %s ] %s ' % (self.code, self.question)
class CharacteristicCategory(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
def __unicode__(self):
return self.title
class Characteristic(models.Model):
code = models.CharField(max_length=10)
title = models.CharField(max_length=200)
description = models.TextField()
characteristic_category = models.ForeignKey(CharacteristicCategory, null=True, blank=True)
indicators = models.ManyToManyField(Indicator)
def __unicode__(self):
return '[ %s ] %s ' % (self.code, self.title)
class Practice(models.Model):
code = models.CharField(max_length=10)
title = models.CharField(max_length=200)
description = models.TextField()
characteristics = models.ManyToManyField(Characteristic)
def __unicode__(self):
return '[ %s ] %s ' % (self.code, self.title)
class Answer(models.Model):
indicator = models.ForeignKey(Indicator)
user = models.ForeignKey(User)
mcqanswer = models.ForeignKey(McqAnswer)
class Macro(models.Model):
place_holder = models.CharField(max_length=255)
translation = models.TextField()
def __unicode__(self):
return '%s -> %s' % (self.place_holder ,self.translation)
class ReportPassword(models.Model):
url = models.CharField(max_length=400)
password = models.CharField(max_length=20)
def __unicode__(self):
return self.url
class Demographic(models.Model):
title = models.CharField(max_length=200)
required = models.BooleanField()
viewable = models.BooleanField()
def __unicode__(self):
return self.title
class DemographicValue(models.Model):
demographic = models.ForeignKey(Demographic)
value = models.CharField(max_length=200)
def __unicode__(self):
return self.value
class UserProfile(models.Model):
user = models.OneToOneField(User)
first_name = models.CharField(max_length=80)
last_name = models.CharField(max_length=80)
roles = models.ManyToManyField(Role, null=True, blank=True)
supervisor= models.CharField(max_length=80)
department_manager= models.CharField(max_length=80)
demographics = models.ManyToManyField(Demographic, through='UserDemographics')
hide_welcome_message = models.BooleanField()
did_fill_demographics = models.BooleanField()
survey_finished = models.BooleanField()
def __unicode__(self):
return self.user.username
class Option(models.Model):
key = models.CharField(max_length=80)
value = models.CharField(max_length=80)
def __unicode__(self):
return self.key
def isValidSurveyOption(key,value):
try:
option=Option.objects.get(key=key)
except Exception:
option = None
if option is not None:
if(option.value== value):
return True
return False
def addSurveyOptionIfNotExist(key,value):
try:
option=Option.objects.get(key=key)
except Exception:
option = None
if option is not None:
option.value= value
option.save()
else:
Option.objects.create(key=key,value=value)
def create_user_profile(sender, **kwargs):
"""When creating a new user, make a profile for him or her."""
u = kwargs["instance"]
if not UserProfile.objects.filter(user=u):
UserProfile(user=u).save()
post_save.connect(create_user_profile, sender=User)
class UserDemographics(models.Model):
userProfile = models.ForeignKey(UserProfile)
demographic = models.ForeignKey(Demographic)
demographic_value = models.ForeignKey(DemographicValue)
class Message(models.Model):
code = models.CharField(max_length=40)
body = models.TextField(max_length=1500)
def __unicode__(self):
return '%s -> %s' % (self.code ,self.body)
class InstanceSetting(models.Model):
code = models.CharField(max_length=100)
value = models.TextField()
def __unicode__(self):
return '%s -> %s' % (self.code ,self.value)
class Comment(models.Model):
user = models.ForeignKey(User)
text = models.TextField()
def __unicode__(self):
return self.text[:50]
class Test(models.Model):
code = models.CharField(max_length=40)
value=models.IntegerField(default=1)
class UsersWaitingList(models.Model):
first_name = models.CharField(max_length=80)
last_name = models.CharField(max_length=80)
email= models.CharField(max_length=80)
role = models.CharField(max_length=80)
supervisor= models.CharField(max_length=80)
department_manager= models.CharField(max_length=80)
def __unicode__(self):
return self.email
class ticket(models.Model):
code=models.TextField()
type=models.TextField()
data=models.TextField()
status=models.TextField()
date_created = models.DateTimeField()
date_modified = models.DateTimeField()
def save(self, *args, **kwargs):
if self.date_created == None:
self.date_created = datetime.now()
self.date_modified = datetime.now()
super(ticket, self).save(*args, **kwargs)
class Userprofile_Roles(models.Model):
role = models.ForeignKey(Role)
userprofile = models.ForeignKey(UserProfile)
def __unicode__(self):
return self.userprofile.first_name
Your many to many field
UserProfile.roles
is clashing with your modelUserprofile_Roles
.It looks like you could use the
through
option to say you want to use theUserprofile_Roles
.However, since your
Userprofile_Roles
does not add any extra fields, it might be simpler to leave theUserProfile
model as it is, and remove theUserprofile_Roles
model.