Django:在类中进行查询

时间:2015-02-03 10:04:39

标签: django django-admin

我想在我的模型类中进行查询。我有以下模型,其中当一个人有项目时签订合同。

class Person(models.Model):
    name    = models.CharField(max_length=32)
    surname = models.CharField(max_length=32)
    address = models.CharField(max_length=32)
    is_doctor  = models.NullBooleanField(blank=True, verbose_name=_(u"Phd?")

class Project(models.Model):
    name                 = models.CharField(max_length=32, verbose_name=_(u"Name"))
    principal_researcher = models.ForeignKey(Person, blank = True, verbose_name=_(u"Researcher associated with the project"))

 class Contract(models.Model):
    person        = models.ForeignKey(Person) #person hired
    project       = models.ForeignKey(Project, blank = True, null = True) #related project
    type_contract = models.CharField(max_length = 9, blank = True, verbose_name = _(u"Type of contract(Full time/grant/Partial time...)"))
    starting_date = models.DateField(blank = True, null = True)
    ending_date   = models.DateField(blank = True, null = True)
    term          = models.CharField(max_length = 120, blank = True)

我想创建一个用户可以进行此查询的类:

告诉我所有没有博士学位的人,在两个日期之间签订合同的全职合同。

因此用户只需输入两个日期即可获得查询。

(所有这些来自Admin界面)

1 个答案:

答案 0 :(得分:0)

我不知道你在“课堂内”是什么意思。

您可以像这样进行查询:

Person.objects.filter(
    is_doctor=False,
    contract__type_contract='full',
    contract__starting_date__gte=start_date,
    contract__ending_date__lte=end_date
)

如果要定义执行此查询的方法,通常在模型管理器中完成:

class PersonManager(models.Manager):
    def full_time_no_doctors_contract_between(self, start_date, end_date):
        return self.filter(...)


class Person(models.Model):
    ...
    objects = PersonManager()

现在你可以这样做:

Person.objects.full_time_no_doctors_contract_between(start_date, end_date)