2012-09-22 4 views
1

빠른 인터넷 검색이 제대로 QDjango의 외래 키를 사용하는 방법에 어떤 결과를 반환하지만 실제로이를 사용하는 방법에 대한 좋은 예를 찾을 수 없습니다.qdjango 외래 키

답변

2

그것의 아주 오래된, 어쩌면 다른 사람이 ... 내가 옛날에 QDjango에서 FKS 검색 및 google group에서 뭔가를 찾을 도움이 될 것입니다, 또한 내가 테이블을 만들

몇 가지 기본적인 예 (하지만 FK 예)와 nice documentation가 (또한 외래 키)이 방법으로 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")); 
+0

감사! 적어도 그것은 후손을위한 한 장소에있을 것입니다 :) – qdot