Фильтрация данных по возрастной группе в django
Я хочу фильтровать свои продукты на основе того, для какой возрастной группы они предназначены. Для этого я планирую использовать поле boolean и фильтровать продукты по нему. У меня есть выпадающее меню, в котором перечислены различные возрастные группы, и когда человек нажимает на одну из них, отображается страница с продуктами, которые имеют boolean true для этой возрастной группы. Вот мои модели
class Product(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
title = models.CharField(max_length=150)
image = models.ImageField(null=False, upload_to='images/')
price = models.DecimalField(max_digits=12, decimal_places=2, default=0)
amount = models.IntegerField(default=0)
detail = RichTextUploadingField()
create_at = models.DateTimeField(auto_now_add=True)
update_at = models.DateTimeField(auto_now=True)
child = models.BooleanField(default=False)
teen = models.BooleanField(default=False)
adult = models.BooleanField(default=False)
def __str__(self):
return self.title
Так ли я должен поступать? Если это так, то должен ли я использовать 3 разных views.py для каждого булеана или есть какой-нибудь эффективный способ? Заранее спасибо!
Нет, вам не нужно 3 views
, чтобы показать это. Вы можете получить значение, которое пользователь отправляет через форму вот так request.GET
, если вы не указали ни одного method
атрибута в форме или для POST
запроса вы можете получить данные, используя request.POST
.
.
Предположим, что вы используете чистый Django с функциональной основой views
. Тогда ваше представление будет выглядеть следующим образом.
def get_products(request):
# getting the gender group you passed via form
gender_group = request.GET.get("gender_group")
# assuming you are passing `child`, `teen` and `adult` through from drop-down value
user_products = Products.objects.filter(**{gender_group: True})
return render(request, "you_template_name.html", {"products": user_products})
Предполагается, что ваша html-форма будет чем-то вроде этой.
<form method="get">
<!-- you other fields -->
<select name="gender_group">
<option value="child">Child</option>
<option value="teen">Teen</option>
<option value="adult">Adult</option>
</select>
</form>
@Mubashar javed Вы правы. Я просто добавил две вещи, и это сработало.
<Form action="{% url 'get_products' %}" method="get">
<select name="gender_group">
<option value="child">Child</option>
<option value="teen">Teenager</option>
<option value="adult">Adult</option>
<input type="submit" value="Submit">
</select>
</Form>