在 Django 中按名称而不是按 ID 搜索 M2M 字段
Search M2M fields by names not by id in django
我需要一个搜索框,模型的其中一个字段有一个 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 说: 以 10 为底的 int() 的无效文字:'niif' 我知道原因,但我如何将与 Specialties 模型关联的 M2M 字段的单词而不是 id 传递给搜索框?
这样试试:
buscar = Specialities.objects.filter(name__iexact = request.POST['buscar'])
if buscar.exists():
contadores = Profile.objects.filter(specialities=buscar[0])
您可以通过 related table 搜索,像这样:
contadores = Profile.objects.filter(specialities__name__iexact = request.POST['buscar'])
我需要一个搜索框,模型的其中一个字段有一个 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 说: 以 10 为底的 int() 的无效文字:'niif' 我知道原因,但我如何将与 Specialties 模型关联的 M2M 字段的单词而不是 id 传递给搜索框?
这样试试:
buscar = Specialities.objects.filter(name__iexact = request.POST['buscar'])
if buscar.exists():
contadores = Profile.objects.filter(specialities=buscar[0])
您可以通过 related table 搜索,像这样:
contadores = Profile.objects.filter(specialities__name__iexact = request.POST['buscar'])