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)
我想在模型的 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)