我需要一个搜索框,该模型的一个字段具有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?
答案 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'])