我想在我的模型类中进行查询。我有以下模型,其中当一个人有项目时签订合同。
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界面)
答案 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)