嗨#1人,Django的: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(它不能被分配给两个类)。
当我显示所有的项目,我想列出老师的名字,所以我创建了一个小模型函数,该函数返回老师的名字:
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(),但这是不可能的。有没有解决方案?
谢谢您的建议!
谢谢你的回答。你能解释一下project_set的来源吗?谢谢! – neurix 2011-12-30 02:25:43
@neurix - 如果你有一个'ForeignKey'从项目到'User',django以'class_set'的形式添加反向相关的模型管理器,除非你在'ForeignKey'字段中指定了'related_name'参数。 https://docs.djangoproject.com/zh/dev/topics/db/queries/#following-relationships-backward – 2011-12-30 02:40:09
有没有办法将老师的pk保留在列表中?我尝试过('class_a_teacher__name','class_a_teacher__pk'),但找不到pk。感谢您的帮助! – neurix 2011-12-30 02:40:39