1

快速谷歌搜索没有返回关于如何正确使用 QDjango 的外键的结果 - 有函数

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

4

1 回答 1

2

它很老了,也许会对其他人有所帮助.. 我在 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"));
于 2014-07-25T08:48:27.693 回答