Filters.py
import django_filters
from .models import *
class ProductFilter(django_filters.FilterSet):
class Meta:
model=Product
fields=['name',]
Класс продукта в models.py
class Product(models.Model):
name = models.CharField(max_length=200)
price = models.FloatField()
digital = models.BooleanField(default=False,null=True, blank=True)
image=models.ImageField(null=True, blank=True)
description=models.CharField(max_length=400, default='SOME STRING', null=True)
Класс OrderItem в models.py
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
views.py
def store(request):
if request.user.is_authenticated:
customer = request.user.customer
# Returns a tuple of (object, created),
# where object is the retrieved or created object and
# created is a boolean specifying whether a new object was created.
order, created = Order.objects.get_or_create(customer=customer, complete=False)
items = order.orderitem_set.all()
cartItems=order.get_cart_items
else:
#Create empty cart for now for non-logged in user
items = []
order = {'get_cart_total':0, 'get_cart_items':0}
cartItems=order['get_cart_items']
products = Product.objects.all()
myFilter=ProductFilter(request.GET, queryset=items)
items=myFilter.qs
context = {'products':products, 'cartItems': cartItems, 'myFilter': myFilter}
return render(request, 'store/store.html', context)
файл шаблонов (main.html)
<form class="form-inline mr-auto my-lg-0" method="get">
<input class="form-control mr-sm-2" style="width:1000px; height:38px;" type="text" placeholder="Search for items" aria-label="Search">
{{myFilter.form}}
<button class="btn btn-outline-warning btn-rounded btn-sm my-0" style="width:80px; height:38px" type="submit">Search</button>
</form>
Ошибка поля в / Не удается разрешить ключевое слово "имя" в поле. Возможные варианты: дата_добавления, идентификатор, заказ, идентификатор_заказа, продукт, идентификатор_продукта, количество.
Метод запроса: ПОЛУЧИТЬ
URL-адрес запроса: http://127.0.0.1:8000/?name=Fifa+20 а>
Версия Django: 2.2
Тип исключения: FieldError
Значение исключения:
Невозможно разрешить ключевое слово "имя" в поле. Возможные варианты: date_added, id, order, order_id, product, product_id, amount.
Местоположение исключения: D: \ ecom \ venv \ lib \ site-packages \ django \ db \ models \ sql \ query.py в names_to_path, строка 1420
Исполняемый файл Python: D: \ ecom \ venv \ Scripts \ python.exe
Версия Python: 3.6.5
После того, как я нажал на поиск с одним из действительных продуктов в каталоге, он показывает мне вышеуказанную ошибку. Из этого я сделал два вывода.
1. name is a valid field in Product class in models.py
2. the other fields(date_added, id, order etc) mentioned in the image are fields of OrderItem class in models.py
но поскольку я хочу выполнить поиск в каталоге продуктов, поле модели в filters.py должно быть установлено на продукты, для которых «имя» является допустимым полем.
Я хочу решить эту проблему и искать товары в своем магазине. Как мне изменить свой код?