現在、データベースをフィルタリングするが、複数のテーブルにアクセスするSQL文を実行したい。私がこのウェブサイトで読んだ他の例から、彼らはすべてプライマリキーではない外部キーを使います。しかし、それは私の現在の設定です。私は2つの問題を抱えています。最初はSQLフィルタです。これらは私のモデルです:Django:モデルを使用して複数のテーブルを照会する
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True);
isATutor = models.BooleanField();
timeAvailable = models.CharField(max_length=3);
class TutorProfile(models.Model):
user = models.ForeignKey(User);
language = models.CharField(max_length=30);
unique_together = (("user", "language"),);
class Tutor(models.Model):
user = models.ForeignKey(User);
subject = models.CharField(max_length=30);
unique_together = (("user", "subject"),);
私は現在、生のSQLを使用しています。
def sqlQuery(avail, lang, sub):
from django.db import connection, transaction
cursor = connection.cursor();
cursor.execute("SELECT a.first_name, a.last_name, a.email FROM auth_user a, books_tutor b, books_tutorprofile c, books_userprofile d WHERE a.id = b.user_id AND a.id = c.user_id AND a.id = d.user_id AND b.subject=%s AND c.language=%s AND d.timeAvailable=%s", [sub, lang, avail]);
row = cursor.fetchall();
return row;
timeAvailableは、3文字の文字列を取っているが、それらが不要な場合はMは=朝、A =午後、E =イブニングと、私たちはと交換しますフォームのMAE "である - 例えば「M--」は朝のみ利用可能です。
最初の問題は、上記のSQLをdjangoモデルとして保持できることです。 2番目の問題は、私はMAEを照会する良い方法が必要です。私は、選択されたものに応じて、8つの異なるSQLパーツとUNIONを行う必要があるかもしれないと考えています。
おかげで、
スティーブ
これはかなりクールです。あなたに質問する:ユーザとサブジェクト/言語の一意性を引き続き維持する方法はありますか?私はサブクラスを使ったことは一度もありませんでした。私はその答えを大いに感謝します。 – user511622
一意性を含めるために編集したオリジナル – Thomas
詳細については、http://docs.djangoproject.com/ja/dev/topics/db/models/#multi-table-inheritanceを参照してください。また、受け入れられた回答をマークすることを忘れないでください;) – Thomas