2017-11-30 11 views
0

私はDjangoプロジェクトで簡単な検索をしています。私は、名前で検索するだけでなく、そのタイプと一部の工場情報を使用してドキュメントを検索したい。DjangoのNameError簡易検索

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:ここに は私models.pyある

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

とNO検索がすべて行われなかった場合、これは、私の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} 

したがって、問題はfolローリング:検索を使用しようとすると、 /showdocsのNameError 名前 'タイプ'が定義されていません。 POST値は次のとおりです。パート '1'、名前 '例'、タイプ '1'。

私は

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

を削除する場合は、名前で検索するには適しています。ですから、問題は外部キー値で検索することですが、それ以上のアイデアはありません。助けていただければ幸いです。

答えて

0

は、あなたが構文を誤解しているようです。この

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

でラインを交換してみてください。なぜあなたが|オペレータを使用しようとしているのか分かりません。

0

これは、Djangoフィルタの動作方法ではありません。 |は、実際には表現ではなく、単にキーワード引数であるため、それらを使用することはできません。この場合、正しい構文は次のようになります。

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