models.py:
JavaScript
x
28
28
1
from django.db import models
2
from django.urls import reverse
3
4
class Category(models.Model):
5
category_id = models.AutoField
6
category_name = models.CharField(max_length=50, default="")
7
desc = models.CharField(max_length=1000)
8
slug = models.SlugField(max_length=20)
9
image = models.ImageField(upload_to='onlinePizza/images', default="")
10
11
def get_url(self):
12
return reverse('category', args=[self.slug])
13
14
def __str__(self):
15
return self.category_name
16
17
18
class Product(models.Model):
19
product_id = models.AutoField
20
product= models.CharField(max_length=50)
21
category = models.ForeignKey(Category, default='', null=True, on_delete=models.CASCADE)
22
desc = models.CharField(max_length=1000)
23
image = models.ImageField(upload_to='onlinePizza/image', default="")
24
25
def __str__(self):
26
return self.product
27
28
This is my views.py file. I show error at:
bestseller = Product.objects.filter(product__category__icontains=’BestSeller’)
views.py:
JavaScript
1
9
1
from django.shortcuts import render
2
from . models import Category, Product, Deal
3
from math import ceil
4
5
def index(request):
6
bestseller = Product.objects.filter(product__category__icontains='BestSeller')
7
context = {'bestseller':bestseller}
8
return render(request, 'onlinePizza/index.html', context)
9
I want to Bestseller category product at index.html
I use Django 4 and pyhton 3.9
Advertisement
Answer
You can’t use CharField
as a ForeignKey
.
It should be like this:
JavaScript
1
2
1
bestseller = Product.objects.filter(category__category_name ='BestSeller')
2
Or like this (the same logic):
JavaScript
1
3
1
best_seller_category = Category.objects.get(category_name = "BestSeller")
2
bestseller = Product.objects.filter(category=best_seller_category)
3
This will output all Products
in category with name BestSeller
.