#python #django
Вопрос:
Я пытался создать функцию поиска в своем приложении, но я застрял на запросе поля внешнего ключа, так как оно ничего не возвращает, а код не показывает ошибок. Ниже приведен мой код.
forms.py
class StockSearchForm(forms.ModelForm):
class Meta:
model = Stock
fields = ['category', 'item_name']
Мой взгляд, где я реализовал поиск
views.py
def list_items(request):
header = 'List of items'
form = StockSearchForm(request.POST or None)
queryset = Stock.objects.all()
context = {
"form": form,
"header": header,
"queryset": queryset,
}
#Searching an item and category
if request.method == 'POST':
queryset = Stock.objects.filter(category__name__icontains=form['category'].value(),
item_name__icontains=form['item_name'].value()
)
context = {
"form": form,
"header": header,
"queryset": queryset,
}
return render(request, "list_items.html", context)
Мои модели следующие.
models.py
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=50, blank=True, null=True)
def __str__(self):
return self.name
class Stock(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)
#category = models.CharField(max_length=50, blank=True, null=True)
item_name = models.CharField(max_length=50, blank=True, null=True)
quantity = models.IntegerField(default='0', blank=True, null=True)
receive_quantity = models.IntegerField(default='0', blank=True, null=True)
receive_by = models.CharField(max_length=50, blank=True, null=True)
issue_quantity = models.IntegerField(default='0', blank=True, null=True)
issue_by = models.CharField(max_length=50, blank=True, null=True)
issue_to = models.CharField(max_length=50, blank=True, null=True)
phone_number = models.CharField(max_length=50, blank=True, null=True)
created_by = models.CharField(max_length=50, blank=True, null=True)
reorder_level = models.IntegerField(default='0', blank=True, null=True)
timestamp = models.DateTimeField(auto_now_add=False, auto_now=True)
last_updated = models.DateTimeField(auto_now_add=True, auto_now=False)
export_to_CSV = models.BooleanField(default=False)
def __str__(self):
return self.item_name '' str(self.quantity)
Итак, что происходит, я могу просто нормально искать поле «имя_элемента», и результаты появляются по мере необходимости, но когда я пытаюсь найти категорию, не появляется ошибка, но результаты не отображаются, я чувствую, что это связано с некоторыми проблемами с полями внешнего ключа, но я не могу просто понять это, я буду очень признателен за некоторую помощь, эта вещь была кошмаром довольно долгое время.
Ответ №1:
Попробуйте сделать следующее. Я предполагаю, что форма используется неправильно.
if request.method == 'POST' and form.is_valid():
queryset = Stock.objects.filter(category__name__icontains=form.cleaned_data.get('category'),
item_name__icontains=form.cleaned_data.get('item_name')
)
Комментарии:
1. Пробовал, но это не сработало, он возвращает ошибку поля»Не могу использовать значение null в качестве значения запроса».
2. В таком случае, можете ли вы поделиться html-кодом? и полная ошибка, которую вы получаете