Dank FilterView können Sie den Code für die Anzeige von Waren, Produkten usw. vereinfachen und reduzieren. Das wird den Code manchmal reduzieren! Anfangs habe ich ListView verwendet und viel wann geschrieben, um nach Abfragen filtern zu können. Bis einer meiner guten Freunde mir django-filter riet. Nachdem ich mehr über ihn gelesen hatte, wurde mir klar, dass dies das ist, was Sie brauchen. Danach, als ich alle meine Ansichten als Objekt verwenden wollte. Das hat mich ein wenig verwirrt, bis mir ein Freund wieder mit einem Hinweis zur Verwendung von FilterView ausgeholfen hat, und jetzt werden wir es ausführlicher besprechen:
Wir haben ein Produktmodell, das eine Sammlungskategorie hat.
class Collection(models.Model): name = models.CharField(verbose_name='Коллекция', max_length=150, default=None) slug = models.SlugField(verbose_name='ссылка') is_active = models.BooleanField(verbose_name='Статус активности', default=True) class Meta: db_table = 'collection' verbose_name = 'Коллекция' verbose_name_plural = 'Коллекции' ordering = ('name',) def __str__(self): return self.name class Product(models.Model): name = models.CharField('название товара', max_length=200) category = models.ForeignKey(Category, blank=True, null=True, verbose_name='Категория') collection = models.ForeignKey(Collection, blank=True, null=True, verbose_name='Коллекция') price = models.IntegerField(verbose_name='цена в ₸', default=0) discount = models.IntegerField(verbose_name='скидка в %', default=0) recommended = models.BooleanField(verbose_name='Рекомендуемый товар', default=False) ....
Wir müssen es in der Vorlage anzeigen, damit wir es nach Belieben filtern oder sortieren können. Dazu erstellen wir filters.py, wo wir schreiben:
Ничем не отличается от джанго формы import django_filters from .models import Product CHOICES =[ ["name", "по алфавиту"], ["price", "дешевые сверху"], ["-price", "дорогие сверху"] ] class ProductFilter(django_filters.FilterSet): name = django_filters.CharFilter(name='name', lookup_expr='icontains') category__slug = django_filters.CharFilter() price__gt = django_filters.NumberFilter(name='price', lookup_expr='gt') price__lt = django_filters.NumberFilter(name='price', lookup_expr='lt') ordering = django_filters.OrderingFilter(choices=CHOICES, required=True, empty_label=None,) class Meta: model = Product exclude = [field.name for field in Product._meta.fields] order_by_field = 'name'
Erstellen Sie als Nächstes eine Ansicht, die von FilterView erbt
class CollectionViews(FilterView): template_name = 'product/coolections.html' model = Product paginate_by = 10 filterset_class = ProductFilter context_object_name = 'products' def get_queryset(self): qs = self.model.objects.prefetch_related('photo_set') if self.kwargs.get('collec_slug'): qs = qs.filter(collection__slug=self.kwargs['collec_slug']) return qs
Wenn Sie Bootstrap verwenden, können Sie #### django-bootstrap3 verwenden.
{% bootstrap_tags laden %} {{ form|as_bootstrap }}
Круто, круто ))
Информация полезная, но текст очень похоже на машинный перевод.
Может быть, а может и нет, все имеют различную речь.. не могу отвечать за всех пользователей ресурса.. поскольку каждый пользователь может дополнить материал ресурса статьями.