Я несколько дней пытался отфильтровать серию сообщений для поля категории, в котором есть модель категорий, чтобы в шаблоне отображались только результаты, соответствующие определенной категории, что-то похожее на то, что мы видим в-Commerce.Идея состоит в том, чтобы показать категории в выпадающем списке и таким образом иметь возможность фильтровать сообщения.
Кто может мне помочь, большое спасибо.
models.py
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=40, unique=True)
is_active = models.BooleanField(default=True)
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
return self.name
def get_absolute_url(self):
return "categoria/%s/" % self.name
class SaleProperty(models.Model):
VENDER = 'VENDER'
RENTAR = 'RENTAR'
SI = 'SI'
NO = 'NO'
CHOICES = (
(VENDER, 'Venta'),
(RENTAR, 'Alquilar')
)
PARKING_OPTIONS = (
(SI, 'Si'),
(NO, 'No')
)
ROOMS = [(i, i) for i in range(11)]
user = models.ForeignKey(User, on_delete=models.CASCADE)
categories = models.ForeignKey('Category', on_delete=models.CASCADE)
title = models.CharField(max_length=100)
description = models.TextField()
parking_option = models.CharField(max_length=2, choices=PARKING_OPTIONS, default=NO)
rent_or_sale = models.CharField(max_length=10, choices=CHOICES, default=VENDER)
rooms = models.IntegerField(choices=ROOMS)
bathrooms = models.IntegerField(choices=ROOMS)
price = models.DecimalField(max_digits=10, decimal_places=1)
area = models.FloatField(max_length=7)
pub_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title # Shows admin the name of entry blog
def summary(self):
return self.description[:100] # This makes short description
def publish(self):
self.pub_date = timezone.now()
self.save()
def pub_date_pretty(self):
return self.pub_date.strftime('%B %-m %Y %X')
def get_images(self):
return UploadImage.objects.filter(post=self)
def get_first_image(self):
return UploadImage.objects.filter(post=self)[:1][0]
views.py
def public_list(request):
list = SaleProperty.objects.filter(pub_date__lte=timezone.now()).order_by('pub_date')
paginator = Paginator(list, 10) # Show 10 items per page
page = request.GET.get('page')
item = paginator.get_page(page)
args = {'list': list, 'item': item}
return render(request, 'realstate/public_list.html', args)
urls.py из приложения
urlpatterns = [
path('vender/', views.sale_property, name='sale_property'),
path('<int:id>/', views.post_property_detail, name='post_property_detail'),
path('user-listado/', views.post_list_user, name='post_list_user'),
path('editar/<int:id>/', views.edit_post, name='edit_post'),
path('borrar_publicacion/<int:id>/', views.delete_post, name='delete_post'),
path('listado_pub/', views.public_list, name='public_list'),
]
public_list.html Шаблон, который я хочу отфильтровать по любому пользователю
{% extends 'base.html' %}
{% load static %}
{% block 'content' %}
<div>
<div class="btn-group" role="group" aria-label="Button group with nested dropdown">
<div class="btn-group" role="group">
<button id="btnGroupDrop1" type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Categorias
</button>
<div class="dropdown-menu" aria-labelledby="btnGroupDrop1">
{% for cat in list %}
<a class="dropdown-item" href="{{ cat.categories}}">{{cat.categories.name}}</a>
{% endfor %}
</div>
</div>
</div>
<!-- Page Heading -->
<h4 class="my-4">Propiedades Disponibles
<hr/>
<small>Listado de propiedades en el mercado</small>
</h4>
<div>
<div>
<div>
<!-- Single Featured Property -->
{% for post in item %}
{% include "realstate/_property_thumbnail.html" %}
<br/>
<br/>
<hr/>
{% endfor %}
</div>
</div>
{% include "realstate/_paginator.html" %}
</div>
<br/>
</div>
{% endblock %}
Я попытался решить предыдущий вопрос таким образом, и он не сработал из-за конфликтов вURL-адрес приложения при использовании slug в URL-адресе, поэтому я приложил URL-адреса своего проекта, а также часть своей базы, где я был частью проблемы.
urls.py изПроект
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('accounts/', include('accounts.urls', namespace='accounts')),
path('property/', include('property.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
base.html, частичный код со ссылкой для перехода к списку элементов, является проблемой в предыдущем решении, поскольку проблема с slug в urls.py в приложении.
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="{% url 'public_list' %}"> #this is the part if the problem with slug in the urls.py in app dir
<button type="button" class="btn btn-secondary">Publicaciones</button>
</a>
</li>
Это мой предыдущий пост в переполнении стека.
[https://stackoverflow.com/questions/53621642/django-template-filter-by-user-using-category-dropdown-button][1]