在数据库中创建用户

时间:2014-12-01 12:46:14

标签: python django python-2.7 orm

我为注册/登录页面建模数据库表。在第一次插入时,所有结尾都没有任何错误,但是在插入后返回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()

1 个答案:

答案 0 :(得分:2)

我认为您的问题出在OneToOneField中。顾名思义,您只能将一个角色与一个用户相关联。外键代表ManyToOne关系,这就是你想要的,在这种情况下,许多用户可以拥有一个角色。

另一方面,当Django默认拥有大部分内容时,您正试图自己创建用户。框架可以避免您手动制作应用程序的敏感部分。

如果您不知道如何操作,可能需要查看documentation