4

我有两个模型。一个模型具有名称字段,另一个模型具有关键技能字段和模型 1 的外键。我已将值存储到字段中。当我使用关键技能搜索时,它应该带有输入字段的名称。当我搜索 c 和 c++ 如果名称同时包含 c 和 c++ 时,当我根据搜索检索名称时,名称会重复两次。我不想被重复。模型.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

视图.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})

搜索结果.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>

谁能指导我?..提前谢谢

4

1 回答 1

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”对于模型来说不是一个好名字的一些评论。

于 2013-11-14T15:22:27.730 回答