【问题标题】:Search M2M fields by names not by id in django在 django 中按名称而不是 id 搜索 M2M 字段
【发布时间】:2015-03-04 23:37:43
【问题描述】:

我需要一个搜索框,模型的一个字段有一个 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 说:invalid literal for int () with base 10: 'niif' 我知道原因,但是如何将与 Specialties 模型关联的 M2M 字段的单词而不是 id 传递到搜索框?

【问题讨论】:

    标签: python django django-orm m2m


    【解决方案1】:

    你可以通过related table搜索,像这样:

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

    【讨论】:

      【解决方案2】:

      试试这样:

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

      【讨论】:

      • @xecgr ruddra 谢谢,这行得通 :) 我知道解决方案很简单,但我可以让它工作,谢谢!
      猜你喜欢
      • 2015-05-08
      • 2018-08-08
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      相关资源
      最近更新 更多