我有以下型号:
class Sked(models.Model):
pass
class Class(models.Model):
class_key = models.CharField(max_length=20, null=True)
name = models.CharField(max_length=150)
class Sked_class(models.Model):
class_room = models.CharField(max_length=100, null=True)
sked = models.ForeignKey(Sked)
class_took = models.ForeignKey(Class)
class User(djmodels.User):
sked = models.ForeignKey(Sked, null=True)
我想创建一个查询,选择特定用户正在使用的所有类,但我仍然无法在不使用SQL的情况下了解如何执行此操作,我已阅读此文档https://docs.djangoproject.com/en/dev/topics/db/queries/,但是我仍然没有得到它,我怎样才能通过这个模型跨越多值关系?
答案 0 :(得分:2)
您正在寻找两件事 - 如何跨越外键,以及如何只返回一组不包含重复项的唯一类。
使用__
跨越外键来分隔关系,并在查询集上使用distinct()
来过滤掉重复项。请记住,外键关系与Django语法一起工作,因为ORM将识别反向关系。这应该有效:
user = User.objects.get(id=1)
Class.objects.filter(sked_class__user=user).distinct()
然而,我不清楚数据模型是否有意义。我认为这更有意义:
class Class(models.Model):
key = models.CharField(max_length=20, null=True)
name = models.CharField(max_length=150)
class Schedule(models.Model):
student = models.ForeignKey(User)
classes = models.ManyToManyField(Class)
然后你会说:
user = User.objects.get(id=1)
Class.objects.filter(schedule__student=user)