我试图通过外键在两个表字段之间创建关系,但是在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()
希望有人可以解释这种语法。
答案 0 :(得分:2)
我认为您不想拥有2个"User"
模型。 tweets
与您的User
和Role
架构无关。
你的意思并不完全清楚,但我认为这样的事情应该有效。
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'