Django简单搜索中的NameError

时间:2017-11-30 19:11:28

标签: python django search foreign-keys

我在Django项目中进行了简单的搜索。除了按名称搜索之外,我想使用他们的类型和工厂信息的一部分来搜索文档。 这是我的 models.py:

class Docs(models.Model):
    Date = models.DateField(default=date.today)
    Name = models.CharField(max_length=50)
    Type = models.ForeignKey(DocTypes)
    Part = models.ForeignKey(Parts)
    Link = models.FileField(upload_to='Docs/%Y/%m/%d')
class Parts(models.Model):
    Name = models.CharField(max_length=50)
    def __str__(self):
        return str(self.Name)
class DocTypes(models.Model):
    Type = models.CharField(max_length=50)
    def __str__(self):
        return str(self.Type)

我的 forms.py:

class DocsSearchForm(ModelForm):
    class Meta:
        model = Docs
        fields = [ 'Name', 'Type', 'Part']

这是我的 views.py 的一部分,如果没有进行搜索,则会给出所有文档

def showdocs(request):
    if request.method == 'POST':
        form = DocsSearchForm(request.POST)
        documents = Docs.objects.filter(Name__contains=request.POST['Name']|
                                          Type==request.POST['Type']|
                                          Part==request.POST['Part'])
    else:
        form = DocsSearchForm()
        documents = Docs.objects.all()
    return render(
        request,
        'showdocs.html',
        {'documents': documents, 'form':form}

所以,问题如下:如果我尝试使用搜索,那么我有 / showdocs上的NameError 名字'类型'没有定义。 POST值包括:Part' 1',Name' Example',Type' 1'。

如果我删除

 Type==request.POST['Type']|
 Part==request.POST['Part']

然后按名称搜索效果很好。所以我猜测问题是关于按外键值搜索,但没有更多的想法。将不胜感激任何帮助。

2 个答案:

答案 0 :(得分:0)

尝试用此

替换该行
Docs.objects.filter(Name__contains=request.POST['Name'],
                    Type=request.POST['Type'],
                    Part=request.POST['Part']
                    )

您似乎误解了语法。我不知道你为什么要在这里使用|运算符。

答案 1 :(得分:0)

这不是Django过滤器的工作方式。你不能|他们,因为他们实际上不是表达式,只是关键字参数。在这种情况下,正确的语法是:

Docs.objects.filter(
  Name__contains=request.POST['Name'],
  Type_Type=request.POST['Type'],
  Part_Name=request.POST['Part'],
)`