मैंने 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})
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'))
आप 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
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।