1
に私は、次の3つのモデルがあります:パス1つのクエリセット()ジャンゴ
class Student(models.Model):
name=models.CharField(max_length=10)
class Task(models.Model):
name=models.CharField(max_length=10)
class StudentTask(models.Model):
student=models.ForeignKey(Student)
task=models.ForeignKey(Task)
は、今、私が欲しいもの、彼が割り当てられているタスクのリストと、その彼の活動のリストを表示することです
my_tasks=StudentTask.objects.annotate(act_id=F('id'),act_name=F('task__name')).values('act_id','act_name').filter(student_id=id)
tasks=Task.objects.exclude(id__in=my_tasks).values('id','name')
「マルチフィールド値をフィルタ値として使用できません。」というエラーが表示されます。私はグーグルで、注釈がエラーと関係があると思った(しかし、私はまだそれなしで試していなかった)。
学生が3つ以上のタスクを持っている場合、my_tasksを使用することは価値がありますか?次のクエリはうまく動作します:
しかし、同じことを2回クエリしています。これを行う適切な方法は、最初のクエリがそのまま失敗することを考慮していますか?