我有一堆模型,通过用户模型相关:settings.AUTH_USER_MODEL
模型1:
class Submission(models.Model):
...
user = models.ForeignKey(settings.AUTH_USER_MODEL)
模型2:
class Block(models.Model):
...
current_teacher = models.ForeignKey(settings.AUTH_USER_MODEL)
模型3:
class CourseStudent(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
block = models.ForeignKey(Block)
...
鉴于两个用户,其中一个是BLock模型中的teacher
,另一个是其他两个模型中的student
用户,我如何获得提交的查询集,其中:
(道歉,我正在努力解决这个问题)
换句话说:教师教授特定的积木,学生在这些积木中开设课程。学生提交工作。教师只希望看到学生在(老师)区块中提交的作品。
或
我想要用户提交的所有提交内容 - > CourseStudent - >块 - > current_teacher,给定老师。
答案 0 :(得分:1)
我认为你在寻找:
// There is a long somewhere that needs to be animated. Let's call it valueToAnimate
// This assumes it's a millisecond value for a time based scrolling view.
// Make a final copy of it for the animator
final long startValue = valueToAnimate;
// Also make a final reference to the target long for the animator
final long finishValue = valueToAnimate + 1000 * 60 * 60 * 24 * 14; // animate to 2 weeks from now
// Calculate distance needed to travel
final long distance = finishValue - startValue;
// Create a ValueAnimator of floats from 0 through to 1.
ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
long valueToAnimate = startValue + (long) (distance * (float) animation.getAnimatedValue());
}
});
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
// Make sure you end on the correct value
valueToAnimate = finishValue;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
你从你想要的东西(“Submission.objects.filter(user__coursestudent__block__current_teacher=teacher).distinct()
的查询集”)开始,然后按照你的方式跨越关系。 Submissions
的目的是消除重复的结果。 (例如,如果用户在两个不同的块中拥有相同的教师,distinct()
将在没有它的情况下出现两次。)
答案 1 :(得分:0)
我认为你需要阻止和提交之间的另一种关系,因为正如你所说,只有学生提交。因此,如果您过滤用户 - > CourseStudent - >块 - > current_teacher然后你会得到'老师'的提交,不是吗?或许我错过了一些东西。