2013-11-14 60 views
4

我有兩個模型。一個帶有名稱字段的模型,另一個帶有模型1的關鍵技能字段和外鍵。我已經將值存儲到字段中。當我使用關鍵技能進行搜索時,它應該帶有輸入字段的名稱。當我搜索c和C++時(如果名稱同時包含c和C++),當我根據搜索檢索名稱時,名稱會重複兩次。我不想重複。 models.py如何避免從數據庫檢索重複值?

class form1(models.Model): 
    name=models.CharField(max_length=20) 
    def __unicode__(self): 
     return self.name 
class form2(models.Model): 
    keyskills=models.CharField(max_length=20) 
    na=models.ForeignKey(form1) 
    def __unicode__(self): 
     return self.keyskills,self.na 

views.py

def add(request): 
    if request.method=='POST': 
     na=request.POST.get('name1') 
     k=request.POST.get('key1') 
     v1=form1(name=na) 
     v1.save() 
     v2=k.split(",") 
     for i in v2: 
      if i: 
       form2(keyskills=i,na_id=v1.id).save() 
     return HttpResponseRedirect('/add') 
    else: 
     s=form2.objects.all() 
     return render(request,"search.html",{'s':s}) 
def search(request): 
    var="" 
    arr=[] 
    if request.method=='POST': 
     s1=request.POST.get("input1") 
     s1=s1.split(",") 
     for i in s1: 
      if i : 
       arr+=form2.objects.filter(keyskills=i) 
     var=arr 
    return render(request,"searchresult.html",{'var1':var}) 

searchresult.html

<html> 
<head> 
</head> 
<body> 
<div id="div1"> 
{% for i in var1 %} 

<p>{{i.na.name}}</p><br> 
{% endfor %} 
</div> 
<form action="." method="post">{% csrf_token %} 
<input type="text" name="input1"> 
<input type="submit" value="search"> 

</form> 
</body> 
</html> 

誰能明白呢..在此先感謝

+0

你爲什麼試圖將你的'表格'定義爲模型? –

+0

抱歉,我沒有找到你 – Madanika

+0

如果我正確理解Alex,他暗示「form1」不是模型的好名字。這可能會令人困惑,而且不具描述性。 模型應該大致對應於數據庫表。理想情況下,每個人都應該對應某種真實世界的實體。 –

回答

0

使用一組,而不是數組。它會避免重複的條目。

def search(request): 

    from sets import Set 

    var="" 

    # create set object 
    set = Set() 

    if request.method=='POST': 

     s1=request.POST.get("input1") 
     s1=s1.split(",") 

     for i in s1: 

      if i : 
       # |= is the set union operator      
       set |= Set(form2.objects.filter(keyskills=i)) 

     # convert set back to list 
     var=list(set) 

    return render(request,"searchresult.html",{'var1':var}) 

的基本思想:

  1. 創建一組對象
  2. 每個搜索進行的聯合操作導致進入設置
  3. 轉換的設置回列表,並將其發送到模板

在附註中,我同意一些評論,因爲「form1」對模型來說並不是很好的名字。

+0

var = list(set) - 這顯示無效的語法錯誤 – Madanika

+0

它應該工作。你能粘貼你的代碼嗎? –

+0

Tthanku這麼多阿什溫...它的工作很好 – Madanika