1

クイックグーグルは、QDjangoの外部キーを適切に使用する方法について結果を返しませんでした-関数があります

QDjangoModel::foreignKeyそしてQDjangoModel::setForeignKey-しかし、実際にそれらを使用する方法についての良い例を見つけることができませんでした。

4

1 に答える 1

2

そのかなり古い、多分他の誰かを助けるでしょう..私は何年もの間QDjangoでFKを検索し、グーグルグループで何かを見つけました、いくつかの基本的な例を含む素晴らしいドキュメントもあります(しかし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依存テーブルのフィールドを使用して選択する場合は、2つのアンデスクを使用し、もちろんselectRelated()(後で結合選択を生成するために使用されるフラグを設定するだけ)を使用します。

QDjangoQuerySet<User> matched;
matched = matched.selectRelated()
            .filter(QDjangoWhere("role__rolename", QDjangoWhere::Equals, "admin"));
于 2014-07-25T08:48:27.693 に答える