django过滤器取决于相关模型字段的字符数

时间:2011-09-29 11:42:53

标签: django django-models

我有两个模型

class Employer(models.Model):
    code = models.CharField(null=False,blank=False,default="")

class JobTitle(models.Model):
    employer = models.ForeignKey(Employer,unique=False,null=False,default=0)
    name = models.CharField(max_length=1000,null=False,default="")

我希望所有雇主的职位名称都少于X个字符。我怎样才能在Django中实现这个目标?

由于

2 个答案:

答案 0 :(得分:2)

正确的代码是

Employer.objects.filter(jobtitle__name__regex="^.{0,20}$")

这将选择所有拥有职位名称最多且包括20个字符的雇主。只需将20替换为您需要的任何数字。

请注意,如果雇主有多个名称长度小于20个字符的JobTitles,它将多次返回该列表中的雇主。如果您不希望发生这种情况,则应将distinct()添加到查询中,如下所示:

Employer.objects.filter(jobtitle__name__regex="^.{0,20}$").distinct()

现在,您只需将雇主退回一次,即使他们有多个简短的职位名称。

答案 1 :(得分:0)

Employer.objects.filter(jobtitle__name__regex="^\W{0, X}$")

使用正则表达式时,可以使用提供的正则表达式从数据库中过滤记录。在这种情况下,将返回名称中包含0到X符号的所有记录