【问题标题】:NameError in Django simple searchDjango简单搜索中的NameError
【发布时间】:2017-11-30 19:11:28
【问题描述】:

我在我的 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 处的名称错误 名称“类型”未定义。 POST 值为:Part '1'、Name 'Example'、Type '1'。

如果我删除

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

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

【问题讨论】:

    标签: python django search foreign-keys


    【解决方案1】:

    尝试用这个替换该行

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        最近更新 更多