मैंने django सीखना शुरू किया और कपड़ों की दुकान बनाने का फैसला किया। मैं जानना चाहूंगी कि पुरुषों की टी-शर्ट जैसे उत्पादों को प्रदर्शित करने के लिए फ़िल्टर कैसे बनाया जाता है || महिला - टी-शर्ट? फिलहाल, मैंने केवल टी-शर्ट, हुडी आदि श्रेणी के अनुसार प्रदर्शित करना सीखा है। डबल फ़िल्टरिंग कैसे करें ताकि महिला और पुरुष द्वारा छँटाई की जा सके?

View.py

class StuffCategory(ListView):
    model = Stuff
    template_name = 'shop/shop.html'
    context_object_name = 'stuffs'

    def get_queryset(self):
        return Stuff.objects.filter(category__slug=self.kwargs['category_slug'], draft=False)

class StuffView(ListView):
    model = Stuff
    template_name = 'shop/shop.html'
    context_object_name = 'stuffs'
    paginate_by = 3

Model.py

class Category(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=200, unique=True)

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('category', kwargs={'category_slug': self.slug})



class Gender(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(max_length=200, unique=True)

    class Meta:
        verbose_name = 'Гендер'
        verbose_name_plural = 'Гендеры'

    def __str__(self):
        return self.name
    def get_absolute_url(self):
        return reverse('gender', kwargs={'gender_slug': self.slug})


class Stuff(models.Model):
    name = models.CharField(max_length=100)
    price = models.FloatField()
    description = models.TextField()
    composition = models.CharField(max_length=150)
    instruction = models.CharField(max_length=150)
    manufacturer_country = models.CharField(max_length=150)
    category = models.ForeignKey(Category, on_delete=models.PROTECT)
    gender = models.ForeignKey(Gender, on_delete=models.PROTECT)
    size = models.ManyToManyField(Size)
    photo = models.ImageField(upload_to='items/')
    slug = models.SlugField(max_length=200, unique=True)
    draft = models.BooleanField("Черновик", default=False)

    class Meta:
        verbose_name = 'Вещь'
        verbose_name_plural = 'Вещи'

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('stuff_detail', kwargs={'slug': self.slug})
0
TheQQWEETT 26 जिंदा 2022, 20:33
आप Q ऑब्जेक्ट या आप django-filter आज़मा सकते हैं
 – 
Ankit Tiwari
26 जिंदा 2022, 20:49

2 जवाब

आप Q ऑब्जेक्ट [Django] का उपयोग कर सकते हैं -डॉक]

कीवर्ड तर्क क्वेरी - फ़िल्टर (), आदि में - एक साथ "AND" एड हैं। यदि आपको अधिक जटिल प्रश्नों को निष्पादित करने की आवश्यकता है (उदाहरण के लिए, OR कथन वाले प्रश्न), तो आप Q ऑब्जेक्ट का उपयोग कर सकते हैं।

from django.db.models import Q

Stuff.objects.filter(Q(gender__name__iexact='men') | Q(gender__name__iexact='female'))
0
user8193706 26 जिंदा 2022, 20:48

आप url में पैरामीटर पास कर सकते हैं जैसा कि आप category_slug के साथ करते हैं

class StuffCategory(ListView):
    # ...
    def get_queryset(self):
        queryset = Stuff.objects.filter(draft=False)
        if self.kwargs.get('category_slug'):
            queryset = queryset.filter(category__slug=self.kwargs['category_slug'])
        if self.kwargs.get('gender_slug'):
            queryset = queryset.filter(gender__slug=self.kwargs['gender_slug'])
        # ... and others if you want!
        return queryset
0
Johnny Herrera 26 जिंदा 2022, 20:51