搜索两个模型

时间:2018-10-05 15:28:45

标签: django python-3.x django-models django-templates django-views

我试图通过一个按钮来获取确切的代码来查看两个不同的模型,但是我找不到表格。我正在使用Django 2.5和python 3.6。 我有以下代码。

#models.py
from django.db import models
class Estadoadm(models.Model):
    estadm = models.CharField(max_length=45, unique=True)
    descripcion = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.estadm

class Estadofis(models.Model):
    estfis = models.CharField(max_length=45, unique=True)
    descripcion = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.estfis

在该视图中,我正在显示一个代码,该代码使我可以在单个模型中进行搜索,并且希望对两个模型进行相同的操作。

#views.py
class GestionarEstados(generic.ListView):
    context_object_name = 'estados'
    template_name = 'estados/gestionar_estados.html'
    success_url = reverse_lazy('gestionar_estados')
    queryset = Estadoadm.objects.all()

    def get_context_data(self, **kwargs):
        context = super(GestionarEstados, self).get_context_data(**kwargs)
        context['estadofis_list'] = Estadofis.objects.all()
        return context

   def get_queryset(self):
        queryset = Estadoadm.objects.filter()
        query = self.request.GET.get('query')
        if query:
        queryset = queryset.filter(Q(estadm__icontains=query) | 
                   Q(descripcion__icontains=query))
        return queryset

在此模板中,我通过按钮中的“查询”变量来调用搜索。

#gestionar_estados.html
        <form method="GET" action="{% url 'gestionar_estados' %}">
            <div class="input-group">
                <div class="input-group-prepend">
                    <button class="btn btn-primary" type="submit" id="button-addon1" value="Search"> <i class="fas fa-search"></i></button>
                 </div>
                    <input class="form-control border border-primary" type="text" name="query" placeholder="Buscar por palabra clave" value="{{ request.GET.query }}">
             </div>
         </form>

我尝试使用iterto“ itertools.chain”在两个模型中进行搜索,但是我还没有意识到该按钮可以激活搜索。另一方面,我读到此itertools不适用于queryset。 在我身上发生的最后一件事就是这个。毫无疑问,我知道这是错误的。 测试视图

 def get_queryset(self):
     query = self.request.GET.get('q')
     estadosadm = Estadoadm.objects.filter(Q(estadm__icontains=query) | Q(descripcion__icontains=query))
     estadosfis = Estadofis.objects.filter(Q(estfis__icontains=query) | Q(descripcion__icontains=query))
     estados_list = chain(estadosadm, estadosfis)
     if query:
         estados_list = estados_list
     return estados_list

请对此表示宝贵的支持。 非常感谢。

0 个答案:

没有答案