引发查询集:相关字段查找无效:​​icontains

sim*_*vic 1 django django-models django-queryset

我正在学习 Django,我使用 ForeignKey 来链接我的模型。icontains 在非外键的领域工作。

我想过滤模型中的项目以仅显示与查询集匹配的字段。但查询集提出:相关字段得到无效查找:icontains

请帮忙。下面是我的模型和视图

我的模特

class Category(models.Model):
    category = models.CharField(max_length=200, default='', blank=True, null=True)
    def __unicode__(self):
        return self.category

class StoreItems(models.Model):
    item_name = models.CharField(max_length=200, default='', blank=True, null=True)
    def __unicode__(self):
        return self.item_name

class Supplier(models.Model):
    supplier_name = models.CharField(max_length=200, default='', blank=True, null=True)
    def __unicode__(self):
        return self.supplier_name

class Unit(models.Model):
    unit = models.CharField(max_length=200, default='', blank=True, null=True)
    def __unicode__(self):
        return self.unit





class Store(models.Model):
    category = models.ForeignKey(Category, blank=True, null=True)
    item_name = models.ForeignKey(StoreItems, blank=True, null=True)
    quantity = models.IntegerField(default='', blank=True, null=False)
    receive_amount = models.IntegerField(blank=True, null=True)
    receive_by = models.CharField(max_length=120, default='', blank=True, null=False)
    issue_amount = models.IntegerField(blank=True, null=True)
    issue_by = models.CharField(max_length=120, default='', blank=True, null=True)
    issue_to = models.CharField(max_length=120, default='', blank=True, null=True)
    supplier_name = models.ForeignKey(Supplier, blank=True, null=True)
    created_by = models.CharField(max_length=15, default='', blank=True, null=True)
    unit = models.ForeignKey(Unit, blank=True, null=True)
    reorder_level = models.IntegerField(default='0', blank=True, null=False)
    export_to_CSV = models.BooleanField(default=False)
    last_updated = models.DateTimeField(auto_now_add=False, auto_now=True)
Run Code Online (Sandbox Code Playgroud)

我的看法

def store_list(request):
    label = 'STORE'
    title = 'Select the item you want to filter'    
    heading = 'SEARCH ITEMS'

    if request.user.is_authenticated():
        form = StoreSearchForm(request.POST or None)
        context = {
        "title": title,
        "form": form,
        "heading": heading,
        }
        if request.method == 'POST':
            queryset = Store.objects.all().order_by('item_name').filter(category__icontains=form['category'].value(), item_name__icontains=form['item_name'].value())
            context = {
            "queryset": queryset,
            "form": form,
            }

    return render(request, "store.html", context)
Run Code Online (Sandbox Code Playgroud)

e4c*_*4c5 7

是的,您不能直接在外键上使用 icontains,但是...

Store.objects.all().order_by('item_name'
  ).filter(category__category__icontains=form['category'].value(), item_name__icontains=form['item_name'].value())
Run Code Online (Sandbox Code Playgroud)

您的类别模型包含一个也称为类别的字段。可以访问它,category__category这意味着您可以使用上面给出的查询。