Django从多个模型加入查询

时间:2017-01-12 15:09:38

标签: django

考虑以下模型:

class Employee(models.Model):
    first_name = models.CharField(max_length=128)
    last_name = models.CharField(max_length=128)

class MonthName(models.Model):
    name = models.CharField(max_length=128)

class Month(models.Model):
    name = models.ForeignKey(MonthName)
    year = models.IntegerField()

class Group(models.Model):
    name = models.CharField(max_length=128)

class EmployeeGroup(models.Model):
    employee = models.ForeignKey(Employee)
    month = models.ForeignKey(Month)
    group = models.ForeignKey(Group)

class Status(models.Model):
    name = models.CharField(max_length=128)

class EmployeeStatus(models.Model):
    employee = models.ForeignKey(Employee)
    month = models.ForeignKey(Month)
    status = models.ForeignKey(Status)

我需要在指定的月份显示一些具有特定状态的员工。除了他们的名字,我需要显示他们所属的组名。我可以这样做:

statuses = models.EmployeeStatus.objects.filter(month=some_month, status__name="Current")
groups = models.EmployeeGroup.objects.filter(month=some_month)

但是要加入这些查询(假设进行一些排序),我将不得不迭代它们。我可以用其他方式实现吗?

看起来应该有型号

class EmployeeData():
    employee = models.ForeignKey(Employee)
    month = models.ForeignKey(Month)
    group = models.ForeignKey(Group)
    status = models.ForeignKey(Status)

但重新设计应用程序是最后的选择 - 我们已经拥有大量数据。

1 个答案:

答案 0 :(得分:0)

我假设您可以从月份模型

开始收集所有这些信息
statuses = some_month.employeestatus_set.filter(status__name='Current')
groups = some_month.employeegroup_set.all()

我想你可以使用select_related作为查询的一部分,首先检索some_month以获取状态'和群组