Поиск по нескольким категориям в Django

Привет всем! Мне нужен поиск по нескольким категориям, но мой код не работает. Когда я ввожу название категорий, я ничего не получаю. Кто-нибудь может мне помочь?

'''views.py'''

class ExpenseListView(ListView):
model = Expense
paginate_by = 5

def get_context_data(self, *, object_list=None, **kwargs):
    queryset = object_list if object_list is not None else self.object_list

    form = ExpenseSearchForm(self.request.GET)
    if form.is_valid():
        name = form.cleaned_data.get('name', '').strip()
        if name:
            queryset = queryset.filter(name__icontains=name)
           

    return super().get_context_data(
        form=form,
        object_list=queryset,
        summary_per_category=summary_per_category(queryset),
        get_per_year_month_summary=get_per_year_month_summary(queryset),
        
        **kwargs)

def get_queryset(self):
    queryset = super(ExpenseListView, self).get_queryset()
    q = self.request.GET.get("q")
    if q:
        return queryset.filter(date__icontains=q)
    return queryset
    
    

def get_gategory(request, pk_test):
    category = Category.objects.get(id=pk_test)
    orders = category.order_set.all()
    order_count = orders.count()

    myFilter = OrderFilter(request.GET, queryset=orders)
    orders = myFilter.qs

    context = {'category': category, 'orders': orders, 
    'order_count': order_count, 'myFilter': myFilter }

    return render(request, 'expense_list.html',context)

'''Возможно, моя проблема в моих виеусах или в моделях. Я новичок в Django и многого не знаю...'''

''' Здесь мой models.py'''

class Category(models.Model):
    class Meta:
        ordering = ('name',)

name = models.CharField(max_length=50, unique=True)

def __str__(self):
    return f'{self.name}'
  
class Expense(models.Model):
  class Meta:
    ordering = ('-date', '-pk')

category = models.ForeignKey(Category, models.PROTECT, null=True, blank=True)

name = models.CharField(max_length=50)
amount = models.DecimalField(max_digits=8, decimal_places=2)

date = models.DateField(default=datetime.date.today, db_index=True)

def __str__(self):
    return f'{self.date} {self.name} {self.amount}'

'''html'''

{% extends "base.html" %}
{% block content %}

<a href="{% url 'expenses:expense-create' %}">add</a>

<form method="get">
{{form.as_p}} 
<button type="submit">search</button>
</form>
<hr>
{% if expenses %}
<form action="#" method="GET">
{% endif %}
<input type="text" name="q" placeholder="category">
<input type="text" name="q" placeholder="name">
    <input type="submit" value="Search">

 </form>
<hr>
<form method="GET" action={% url 'expenses:expense-list' %}>
 {% csrf_token %}
 From: <input type="date" name="q"/>
 To: <input type="date" name="q"/>

  From_category:
    <select>
<option selected disabled="true"></option>
{% for obj in object_list %}
<option value="{{ obj.category }}">{{obj.category}}</option>
{%endfor%}
</select>
<button type="submit">search</button>
 </form>


 </div>
 <br>
 <table border="1">
 <caption>Expenses</caption>
 <thead>
  <tr>
    <th>no.</th>
    <th>category</th>
    <th>name</th>
    <th>amount</th>
    <th>date</th>
    <th>actions</th>
    
    
  </tr>
 </thead>
 <tbody>

 {% for obj in object_list %}
  <tr>
    <td>{{ page_obj.start_index|add:forloop.counter0 }}.</td>
    <td>{{ obj.category|default:"-" }}</td>
    <td>{{ obj.name|default:"-" }}</td>
    <td>{{ obj.amount|floatformat:2 }}</td>
    <td>{{obj.date}}</td>
    <td>
      <a href="{% url 'expenses:expense-edit' obj.id %}">edit</a>
      <a href="{% url 'expenses:expense-delete' obj.id %}">delete</a>
    </td>
  </tr>
  {% empty %}
  <tr>
    <td colspan="5">no items</td>
  </tr>
 {% endfor %}
 </tbody>
</table>
</form>
{% include "_pagination.html" %}
<hr>
 <table border="1">
<caption>Summary per category</caption>
 <tr>
{% for category, total in summary_per_category.items %}
<tr>
    <td>{{category}}:</td>
    <td>{{total|floatformat:2}}</td>
 </tr>
 {% endfor %}
 </tr>
</table>
 <hr>
 <table border="2">
 <caption>Summary per year-month </caption>
 <tr>
 {% for year, total_year in get_per_year_month_summary.items %}
  <tr>
    <td>{{year}}</td>
    <td>{{total_year|floatformat:2}}</td>
 </tr>
 {% endfor %}
</tr>
</table>

  {% endblock %}

'''urls'''

urlpatterns = [
path('expense/list/',
     ExpenseListView.as_view(),
     name='expense-list'),
path('expense/create/',
     CreateView.as_view(
        model=Expense,
        fields='__all__',
        success_url=reverse_lazy('expenses:expense-list'),
        template_name='generic_update.html'
     ),
     name='expense-create'),
path('expense/<int:pk>/edit/',
     UpdateView.as_view(
        model=Expense,
        fields='__all__',
        success_url=reverse_lazy('expenses:expense-list'),
        template_name='generic_update.html'
     ),
     name='expense-edit'),
path('expense/<int:pk>/delete/',
     DeleteView.as_view(
        model=Expense,
        success_url=reverse_lazy('expenses:expense-list'),
        template_name='generic_delete.html'
     ),
     name='expense-delete'),

path('category/list/',
     CategoryListView.as_view(),
     name='category-list'),
path('category/create/',
     CreateView.as_view(
        model=Category,
        fields='__all__',
        success_url=reverse_lazy('expenses:category-list'),
        template_name='generic_update.html'
     ),
     name='category-create'),
path('category/<int:pk>/delete/',
     DeleteView.as_view(
        model=Category,
        success_url=reverse_lazy('expenses:category-list'),
        template_name='generic_delete.html'
     ),
     name='category-delete'),

path('category/<int:pk>/update/',
     UpdateView.as_view(
        model=Category,
        fields='__all__',
        success_url=reverse_lazy('expenses:category-list'),
        template_name='generic_update.html'
     ),
     name='category-update'),
]

это экран просмотра моих проектов

https://bcars4u.com/blog/2022/07/10/mercedes-500e/ очень хороший пост Mercedes 500e обзор и лучший для покупки в 2022 году

Вернуться на верх