快速谷歌搜索没有返回如何正确使用QDjango外键的结果 - 有功能
QDjangoModel::foreignKey
和QDjangoModel::setForeignKey
- 但我找不到任何关于如何在实践中使用它们的好例子。
答案 0 :(得分:2)
它很老了,也许会帮助其他人..我在QDjango搜索了FKs,并在google group找到了一些东西,还有nice documentation有一些基本的例子(但没有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依赖表中的字段进行选择,请使用两个不需要的,当然要使用selectRelated()(它只设置一些标志,稍后用于生成连接选择),如:
QDjangoQuerySet<User> matched;
matched = matched.selectRelated()
.filter(QDjangoWhere("role__rolename", QDjangoWhere::Equals, "admin"));