bernar92
Мамыр 17, 2018, 9:50 Т.Қ.

Сүзуді жеңілдету үшін ListView орнына FilterView қалай қолдандым

FilterView арқасында сіз тауарларды, өнімдерді және т.б. көрсетуге арналған кодты жеңілдетуге және азайтуға болады. Бұл кейде кодты азайтады! Алдымен мен ListView қолданбасын қолдандым және сұраулар бойынша сүзгілеу мүмкіндігін алу үшін көп жаздым. Менің жақсы достарымның бірі маған кеңес бергенше django-filter . Ол туралы көбірек оқығаннан кейін мен бұл сізге қажет екенін түсіндім. Содан кейін мен барлық көзқарастарымды объект ретінде пайдаланғым келген кезде. Бұл мені біраз таң қалдырды, досым қайтадан FilterView пайдалану туралы кеңес беруге көмектесті, енді біз оны толығырақ талқылаймыз:


Бізде коллекция санаты бар өнім үлгісі бар.

  1. class Collection(models.Model):
  2. name = models.CharField(verbose_name='Коллекция', max_length=150, default=None)
  3. slug = models.SlugField(verbose_name='ссылка')
  4. is_active = models.BooleanField(verbose_name='Статус активности', default=True)
  5.  
  6. class Meta:
  7. db_table = 'collection'
  8. verbose_name = 'Коллекция'
  9. verbose_name_plural = 'Коллекции'
  10. ordering = ('name',)
  11.  
  12. def __str__(self):
  13. return self.name
  14.  
  15. class Product(models.Model):
  16. name = models.CharField('название товара', max_length=200)
  17. category = models.ForeignKey(Category, blank=True, null=True, verbose_name='Категория')
  18. collection = models.ForeignKey(Collection, blank=True, null=True, verbose_name='Коллекция')
  19. price = models.IntegerField(verbose_name='цена в ₸', default=0)
  20. discount = models.IntegerField(verbose_name='скидка в %', default=0)
  21. recommended = models.BooleanField(verbose_name='Рекомендуемый товар', default=False)
  22. ....

Біз оны үлгіде көрсетуіміз керек, осылайша біз оны қалауымызша сүзгіден өткізе немесе сұрыптай аламыз. Ол үшін біз жазатын жерде filters.py жасаймыз:

  1. Ничем не отличается от джанго формы
  2.  
  3. import django_filters
  4. from .models import Product
  5.  
  6. CHOICES =[
  7. ["name", "по алфавиту"],
  8. ["price", "дешевые сверху"],
  9. ["-price", "дорогие сверху"]
  10. ]
  11.  
  12.  
  13. class ProductFilter(django_filters.FilterSet):
  14. name = django_filters.CharFilter(name='name', lookup_expr='icontains')
  15. category__slug = django_filters.CharFilter()
  16. price__gt = django_filters.NumberFilter(name='price', lookup_expr='gt')
  17. price__lt = django_filters.NumberFilter(name='price', lookup_expr='lt')
  18. ordering = django_filters.OrderingFilter(choices=CHOICES, required=True, empty_label=None,)
  19.  
  20. class Meta:
  21. model = Product
  22. exclude = [field.name for field in Product._meta.fields]
  23. order_by_field = 'name'

Әрі қарай, FilterView ішінен мұраланған көріністі жасаңыз

  1. class CollectionViews(FilterView):
  2. template_name = 'product/coolections.html'
  3. model = Product
  4. paginate_by = 10
  5. filterset_class = ProductFilter
  6. context_object_name = 'products'
  7.  
  8. def get_queryset(self):
  9. qs = self.model.objects.prefetch_related('photo_set')
  10. if self.kwargs.get('collec_slug'):
  11. qs = qs.filter(collection__slug=self.kwargs['collec_slug'])
  12. return qs

Егер сіз bootstrap пайдалансаңыз, #### django-bootstrap3 пайдалана аласыз.

{% жүктеу bootstrap_tags %} {{ form|as_bootstrap }}

Осы тақырып бойынша ұсынылатын мақалалар

Мақала бойынша сұралады0сұрақтар(лар)

5

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Evgenii Legotckoi
  • Мамыр 18, 2018, 3:03 Т.Ж.

Круто, круто ))

Спасибо за ценный материал для всего сообщества.
Отмечу, что на сегодняшний день уже можно спокойно переходить на django-bootstrap4 .
А также подружить django-bootstrap4 c bootstrap-material-design . Эта связка вполне успешно работает. Нужно лишь править некоторые мелочи.
ПК
  • Мамыр 19, 2018, 5:04 Т.Қ.

Информация полезная, но текст очень похоже на машинный перевод.

Evgenii Legotckoi
  • Мамыр 19, 2018, 6:27 Т.Қ.

Может быть, а может и нет, все имеют различную речь.. не могу отвечать за всех пользователей ресурса.. поскольку каждый пользователь может дополнить материал ресурса статьями.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз