Django:在 class 中进行查询

Django: Make a query inside a class

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

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)

我想创建一个 class,用户可以在其中进行此查询:

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

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

(所有这些都来自管理界面)

我不知道你所说的"inside a class"是什么意思。

您可以这样查询:

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)