我为注册/登录页面建模数据库表。在第一次插入时,所有结尾都没有任何错误,但是在插入后返回IntegrityError异常:
重复键值违反了唯一约束 " mainws_user_role_id_key" DETAIL:Key(role_id)=(1)已经存在。
如果OneToOneField仅将行设为唯一,则意味着我无法创建具有一个角色的许多用户,对吧?那么更好地使用ForeignKey(Role)
来解决这种情况呢?
源代码:
class User(models.Model):
login = models.CharField(max_length=50)
password = models.CharField(max_length=50)
address = models.CharField(max_length=255)
phone = models.CharField(max_length=25)
postcode = models.CharField(max_length=25)
email = models.EmailField()
role = models.OneToOneField(Role, primary_key=False)
class Role(models.Model):
role_name = models.CharField(max_length=25, unique=True)
def create_user(user_data):
md5 = hashlib.md5()
md5.update(user_data['password'])
user_role = Role.objects.filter(role_name='user')[0]
password_md5 = md5.hexdigest()
new_user = User(login=user_data['login'],password=password_md5,address=user_data['address'],
phone=user_data['phone'],postcode=user_data['postcode'],
email=user_data['email'],role=user_role)
new_user.save()
答案 0 :(得分:2)
我认为您的问题出在OneToOneField中。顾名思义,您只能将一个角色与一个用户相关联。外键代表ManyToOne关系,这就是你想要的,在这种情况下,许多用户可以拥有一个角色。
另一方面,当Django默认拥有大部分内容时,您正试图自己创建用户。框架可以避免您手动制作应用程序的敏感部分。
如果您不知道如何操作,可能需要查看documentation。