こんにちはStackOverflowの人々、私の現在のプロジェクトでジャンゴ:モデル関数の明確なとSQLクエリ
が、私は以下のモデルの構造を有する:
class Project(models.Model):
student_id = models.ForeignKey(User)
class_a = models.ForeignKey(ClassA)
class_b = models.ForeignKey(ClassB)
...
class ClassA(models.Model):
teacher_name = models.CharField(...)
class ClassB(models.Model):
teacher_name = models.CharField(...)
がにClassAとClassBのは非常に異なっており、彼らだけが唯一のにはteacher_nameが共通しているので、別のクラスに分けて保存しています。 さらに、各プロジェクトでは、class_a または class_bにのみForeignKeyを含めることができます(2つのクラスに割り当てることはできません)。私はすべてのプロジェクトを表示し、私は先生の名前をリストにしたい場合は
は、それゆえ私は、先生の名前を返す小さなモデル関数を、作成した:
def get_teacher_name(self):
if self.class_a:
return self.class_a.teacher_name
if self.class_b:
return self.class_b.teacher_name
は今、私はクエリを記述したいですSTUDENT_IDのための教師の名前を返し、唯一の教師は一度名前を返し、例えば:学生X プロジェクト教師のための 生物学ミセスX 物理学氏Y ( - >数学Yさんは無視してください)
Djangoクエリをどのように構造化すればよいですか?私はしたいと思います Project.objects.filter(student_id = user.pk).values( 'get_teacher_name')。distinct()、これはできません。それには解決策はありますか?
ありがとうございます。値は、呼び出しのためにあなたのユニークな値を与えるvalues
と https://docs.djangoproject.com/en/dev/topics/db/aggregation/#order-of-annotate-and-values-clauses
annotate
を探して
ありがとうございました。 project_setがどこから来たのか教えてください。ありがとうございました! – neurix
@neurix - プロジェクトから 'User'に' ForeignKey'がある場合、 'ForeignKey'フィールドに' related_name'引数を指定しない限り、djangoは 'class_set'の形式で逆関連モデルマネージャを追加します。 https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward –
教師のpkをリストに残す方法はありますか?私は( 'class_a_teacher__name'、 'class_a_teacher__pk')を試しましたが、pkが見つかりません。ご協力ありがとうございました! – neurix