Отфильтруйте шаблон django с помощью выпадающей кнопки - PullRequest
0 голосов
/ 09 декабря 2018

Я несколько дней пытался отфильтровать серию сообщений для поля категории, в котором есть модель категорий, чтобы в шаблоне отображались только результаты, соответствующие определенной категории, что-то похожее на то, что мы видим в-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]

...