FilterView арқасында сіз тауарларды, өнімдерді және т.б. көрсетуге арналған кодты жеңілдетуге және азайтуға болады. Бұл кейде кодты азайтады! Алдымен мен ListView қолданбасын қолдандым және сұраулар бойынша сүзгілеу мүмкіндігін алу үшін көп жаздым. Менің жақсы достарымның бірі маған кеңес бергенше django-filter . Ол туралы көбірек оқығаннан кейін мен бұл сізге қажет екенін түсіндім. Содан кейін мен барлық көзқарастарымды объект ретінде пайдаланғым келген кезде. Бұл мені біраз таң қалдырды, досым қайтадан FilterView пайдалану туралы кеңес беруге көмектесті, енді біз оны толығырақ талқылаймыз:
Бізде коллекция санаты бар өнім үлгісі бар.
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) ....
Біз оны үлгіде көрсетуіміз керек, осылайша біз оны қалауымызша сүзгіден өткізе немесе сұрыптай аламыз. Ол үшін біз жазатын жерде filters.py жасаймыз:
Ничем не отличается от джанго формы 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'
Әрі қарай, FilterView ішінен мұраланған көріністі жасаңыз
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
Егер сіз bootstrap пайдалансаңыз, #### django-bootstrap3 пайдалана аласыз.
{% жүктеу bootstrap_tags %} {{ form|as_bootstrap }}
Круто, круто ))
Информация полезная, но текст очень похоже на машинный перевод.
Может быть, а может и нет, все имеют различную речь.. не могу отвечать за всех пользователей ресурса.. поскольку каждый пользователь может дополнить материал ресурса статьями.