2017-11-12 11 views
0

こんにちは、私はちょうどpeeweeアプリケーションで作業を開始し、ほとんどの結合クエリで立ち往生し始めている。現在、次のモデルをセットアップしています:Peeweeでのクエリへの参加

class Equipment(BaseModel): 
    equip_id = CharField(primary_key=True) 
    is_fullset = BooleanField(default=False) 


class Department(BaseModel): 
    dept_id = IntegerField(primary_key=True) 
    dept_name = CharField() 


class User(BaseModel): 
    email = CharField(primary_key=True) 
    equip_id_fk = ForeignKeyField(Equipment, related_name="equipments", null=True) 
    dept_id_fk = ForeignKeyField(Department, related_name="departments") 
    user_name = CharField() 

すべてのテーブルの結合情報を保持するビュー/テーブルを表示したいとします。私はこのようなユーザーと機器(今のところ)のためにこれを試みた:

query = (Equipment.select(Equipment, User).join(User, JOIN.LEFT_OUTER)) 

ここで私は機器の値を取得し、次にユーザー。私は機器を使ってユーザーを変更しようとしましたが、その逆もありましたが、うまくいかなかったのです。 基本的に、私はこのために、1つの特異テーブルにすべてのこれらの3つのテーブルを表示したい:

User Name || User Email || Dept_ID || Dept_NAME || EQUIP_ID || Is_Fullset 

私は私のモデルやクエリを変更する必要がある場合は私に知らせてください。どんな助けでも本当に感謝しています。

答えて

1
query = (User 
     .select(User, Equipment, Department) 
     .join(Equipment, JOIN.INNER) 
     .switch(User) 
     .join(Department, JOIN.INNER)) 
for row in query: 
    print(row.user_name, row.email, row.dept_id_fk.dept_id, 
      row.dept_id_fk.dept_name, row.equip_id_fk.equip_id, 
      row.equip_id_fk.is_fullset) 
+0

ありがとうございました@coliefer、それはうまくいきました。私はそれに関連する質問がありました。私のユーザーインスタンスのいくつかはnullの外部キーを持っていますが、上記のクエリがうまくいくと思います。 例えば、これは私が新しいユーザーインスタンスを作成する方法です。外部キーはnullになります: 'user = User.create メール=のRequest.Form [ 'EMAIL_ID']、 USER_NAME =のRequest.Form [ 'USER_NAME']、 dept_id_fk =のRequest.Form [ 'dropdown_depts'] =なし equip_id_fk) ' –

+0

第二に、私がしようとすると、ユーザーインスタンスの1つを機器IDで編集すると、リストに新しい機器IDが表示されますが、提案されたクエリを使用してis_fullset(boolean)は更新されません。 'equip_id =のRequest.Form [ 'radioID'] Equipment.create( equip_id = equip_id、 is_fullset =のRequest.Form [ "radioType"] ) ユーザ= User.select()。ここで、(User.email == email_id).get() user.equip_id_fk = equip_id user.save() ' 本当にありがとうございました:) –