在django中按名称而不是id搜索M2M字段

时间:2015-01-07 06:01:23

标签: python django django-orm m2m

我需要一个搜索框,该模型的一个字段具有M2M字段。我必须把它工作,但只有当我寻找M2M字段的id而不是名字时才有效。我的模特:

class Specialities(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


 class Profile(models.Model):
        user = models.OneToOneField(User)
        name = models.CharField(max_length=200)
        specialities = models.ManyToManyField(Specialities)

        def __str__(self):
            return self.name

我的观点:

class SearchView(TemplateView):
    template_name = 'contadores/search.html'

    def post(self,request,*args,**kwargs):
        buscar = request.POST['buscar']
        contadores = Profile.objects.filter(specialities=buscar)
        ctx = {'contadores':contadores}
        return render_to_response('contadores/resultados.html',ctx,context_instance=RequestContext(request))

" contadores"中的查询集工作正常,但正如我之前所说,搜索框只接收M2M字段的id,如果我在搜索框中查找单词,django说: int()的无效文字,基数为10:&#39 ; niif' 我知道原因,但是我怎样才能将与Specialties模型相关联的M2M字段的单词转移到搜索框而不是id?

2 个答案:

答案 0 :(得分:0)

试试这样:

 buscar = Specialities.objects.filter(name__iexact = request.POST['buscar'])
 if buscar.exists():
     contadores = Profile.objects.filter(specialities=buscar[0])

答案 1 :(得分:0)

您可以通过related table进行搜索,如下所示:

contadores = Profile.objects.filter(specialities__name__iexact = request.POST['buscar'])
相关问题