Поиск по нескольким категориям в 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 году