qdjango外键

时间:2012-09-22 15:56:54

标签: qt orm foreign-keys

快速谷歌搜索没有返回如何正确使用QDjango外键的结果 - 有功能

QDjangoModel::foreignKeyQDjangoModel::setForeignKey - 但我找不到任何关于如何在实践中使用它们的好例子。

1 个答案:

答案 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"));