use*_*268 4 python sql orm foreign-key-relationship peewee
我试图通过外键在两个表字段之间创建关系,但在文档或 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'
Run Code Online (Sandbox Code Playgroud)
to_field 指的是我的代码片段中等效表“users”中的相关字段。在 peewee 的文档中,我看到 related_names 作为参数,它引用用户模型中不存在的字段推文。
class User(Model):
name = CharField()
class Tweet(Model):
user = ForeignKeyField(User, related_name='tweets')
content = TextField()
Run Code Online (Sandbox Code Playgroud)
希望有人可以解释这个语法。
我不认为你想要有 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'
Run Code Online (Sandbox Code Playgroud)
希望 的含义to_field是清楚的。它表示,模型role上的字段应根据列指向表User中的记录。Rolerole_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'
Run Code Online (Sandbox Code Playgroud)
现在,假设您已经说了,已加载“超级用户”角色,您应该能够执行类似的操作来循环具有该角色的所有用户。
for user in superuser.users
print user.username
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10822 次 |
| 最近记录: |