(Python) - Peewee - 如何创建外键

时间:2014-08-03 13:36:33

标签: python sql orm foreign-key-relationship peewee

我试图通过外键在两个表字段之间创建关系,但是在docover或stackoverflow中的相关线程中没有示例。这是我的代码:

class User(BaseModel):
    """ Field Types """
    user_id = PrimaryKeyField()
    username = CharField(25)
    role = ForeignKeyField(User, to_field='role_id')

    class Meta:
        db_table = 'users'


class User(BaseModel):
    """ Field Types """
    role_id = PrimaryKeyField()
    rolename = CharField(25)

    class Meta:
        db_table = 'roles'

to_field是指等效表中的相关字段' users'在我的代码段中。在peewee的文档中,我看到related_names作为参数,它指的是用户模型中不存在的字段推文。

class User(Model):
    name = CharField()

class Tweet(Model):
    user = ForeignKeyField(User, related_name='tweets')
    content = TextField()

希望有人可以解释这种语法。

2 个答案:

答案 0 :(得分:2)

我认为您不想拥有2个"User"模型。 tweets与您的UserRole架构无关。

你的意思并不完全清楚,但我认为这样的事情应该有效。

class Role(BaseModel):
    """ Field Types """
    role_id = PrimaryKeyField()
    rolename = CharField(25)

    class Meta:
        db_table = 'roles'

class User(BaseModel):
    """ Field Types """
    user_id = PrimaryKeyField()
    username = CharField(25)
    role = ForeignKeyField(Role, to_field="role_id")

    class Meta:
        db_table = 'users'

希望to_field的含义很清楚。它说,role模型上的User字段应指向基于Role列的role_id表中的记录。

相关名称用于后引用。例如,您可以将它们组合在一起,以便您可以访问具有给定角色的所有用户。

例如,更改您的用户类:

class User(BaseModel):
    """ Field Types """
    user_id = PrimaryKeyField()
    username = CharField(25)
    role = ForeignKeyField(Role, to_field="role_id", related_name="users")

    class Meta:
        db_table = 'users'

现在,如果您已经说出了“超级用户”角色,那么您应该可以执行此类操作来循环遍历具有该角色的所有用户。

for user in superuser.users
    print user.username

答案 1 :(得分:-1)

可能是第二类用户

class User(BaseModel):
    """ Field Types """
    role_id = PrimaryKeyField()
    rolename = CharField(25)

    class Meta:
        db_table = 'roles'

应该是课堂角色吗?

class Roles(BaseModel):
    """ Field Types """
    role_id = PrimaryKeyField()
    rolename = CharField(25)

    class Meta:
        db_table = 'roles'