Поиск поля внешнего ключа в django

#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-кодом? и полная ошибка, которую вы получаете