2011-09-29 121 views
0

的字符数我有两个型号,使得Django的过滤器depeding对相关模型的领域

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="") 

,我想获得它的名字JOBTITLE小于X chracters所有雇主。我怎样才能在Django中实现这一点?

感谢

回答

2

这个正确的代码

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

这将选择所有谁拥有职位名称直至并包括20雇主长字符。只需用您需要的任何号码替换20即可。

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

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

你现在只得到了雇主回来一次,即使他们有多个短JobTitles。

0

尝试

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

当您使用正则表达式,你可以从所提供的正则表达式数据库中筛选记录。在这种情况下与名称包含0到X标志的所有记录将被退回

+0

谢谢,但我们不要在某处写作业标题吗?那regex究竟意味着什么? – brsbilgic

+0

此代码不起作用。请参阅下面的工作查询。 – mmcnickle

+0

oo是的,我犯了错误,当然应该是jobtitle而不是employer_set – szaman