2015-01-07 2 views
0

Мне нужно окно поиска, одно из полей модели имеет поле M2M. Я должен использовать его, но работает только тогда, когда я ищу идентификатор поля M2M, а не для имени. мои модели:Поиск полей M2M по именам не по id в django

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

QuerySet в «contadores» работает хорошо, но, как я уже говорил ранее, окно поиска только получить идентификатор поля M2M, если я искать слово в окне поиска django говорит: неверный литерал для int() с базой 10: 'niif' Я знаю причину, но как я могу передать в поле поиска слово поля M2M, связанное с специальностями модель вместо id?

ответ

0

Что вы можете сделать, это поиск по related table, как это:

contadores = Profile.objects.filter(specialities__name__iexact = request.POST['buscar']) 
0

Попробуйте так:

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

@xecgr ruddra спасибо, вот работает :) я знал, что решение было довольно просто но я могу заставить его работать, спасибо! – dfrojas

+0

приветствуется :) Если все работает, вы можете отметить ответ как «принятый». – ruddra

Смежные вопросы