快速谷歌搜索没有返回关于如何正确使用 QDjango 的外键的结果 - 有函数
QDjangoModel::foreignKey
和QDjangoModel::setForeignKey
- 但我找不到任何关于如何在实践中使用它们的好例子。
快速谷歌搜索没有返回关于如何正确使用 QDjango 的外键的结果 - 有函数
QDjangoModel::foreignKey
和QDjangoModel::setForeignKey
- 但我找不到任何关于如何在实践中使用它们的好例子。
它很老了,也许会对其他人有所帮助.. 我在 QDjango 中搜索 FKs 并在google group中找到了一些东西,还有一些很好的文档和一些基本示例(但没有 FK 示例)
我以这种方式使用 QDjango 创建表模型(也是外键):
class Role : public QDjangoModel { ... };
class User : public QDjangoModel
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QString password READ password WRITE setPassword)
Q_PROPERTY(Role *role READ role WRITE setRole)
Q_CLASSINFO("name", "max_length=255")
Q_CLASSINFO("password", "max_length=255")
Q_CLASSINFO("role", "on_delete=cascade")
QString mName;
QString mPassword;
public:
User(QObject *parent = 0);
QString name() const { return mName; }
void setName(QString name) { mName = name; }
QString password() const { return mPassword; }
void setPassword(QString pass) { mPassword = pass; }
Role *role() const;
void setRole(Role *role);
};
您可以使用 Q_CLASSINFO 为列设置一些属性。外键绑定在构造函数中并填充到角色函数中。
User::User(QObject *parent)
: QDjangoModel(parent)
{
setForeignKey("role", new Role(this));
}
Role *User::role() const
{
return qobject_cast<Role *>(foreignKey("role"));
}
void User::setRole(Role *role)
{
setForeignKey("role", role);
}
当您想使用 fk 依赖表中的字段进行选择时,请使用两个undescores,当然还可以使用 selectRelated() (它只是设置了一些稍后用于生成连接选择的标志),例如:
QDjangoQuerySet<User> matched;
matched = matched.selectRelated()
.filter(QDjangoWhere("role__rolename", QDjangoWhere::Equals, "admin"));