0

「検索」と呼ばれるdjango cmsを使用してアプリを作成しました。これは基本的にユーザーから単語を取得し、10個のxmlドキュメントで検索し、各xmlファイルでその単語の出現頻度を返します。このデータは、sqlite3 データベースを使用して作成したテーブルに格納されます。

今私の問題は、ユーザーが単語を入力するたびに、削除クエリを使用せずにコード スニペットを使用して、テーブル内の前のデータを削除する必要があることです。これは、Python インタラクティブ シェルで delete query と入力することで簡単に実行できるためです。

しかし、ユーザーが count を示す結果ページにリダイレクトされるとすぐに、別の単語を再度入力すると、以前のデータは消去されます。ちょっとこれは私のviews.pyコードです:

# Create your views here.
#!/usr/bin/python 

from django.template import loader, RequestContext, Context
from django.http import HttpResponse
from search.models import Keywords
from django.shortcuts import render_to_response as rr

def front_page(request):

    if request.method == 'POST' :
        from skey import find_root_tags, count, sorting_list
        str1 = request.POST['word'] 
        str1 = str1.encode('utf-8')
        list = []
        path = '/home/pooja/Desktop/'
        fo = open("/home/pooja/Desktop/xml.txt","r")

        for i in range(count.__len__()):
            file = fo.readline()
            file = file.rstrip('\n')            
            find_root_tags(path+file,str1,i)    

            list.append((file,count[i]))

        sorting_list(list)

        for name, count1 in list:
            s = Keywords(file_name=name,frequency_count=count1)# saving my data in table here .
            s.save()

        fo.close()
        list1 = Keywords.objects.all()
        t = loader.get_template('search/results.html')
        c = Context({'list1':list1,})

        return HttpResponse(t.render(c))

    else :  
        str1 = ''
        template = loader.get_template('search/front_page.html')
        c = RequestContext(request)
        response = template.render(c)
        return HttpResponse(response)

私のmodels.pyファイル:

from django.db import models

class Keywords(models.Model):
    file_name = models.CharField(primary_key=True, max_length=100)
    frequency_count = models.IntegerField()

    def __unicode__(self):
        return self.file_name

助けてください、私はdjangoが初めてです。

4

2 に答える 2

0

Django Signalsを見なければならないようです。新しいデータを保存する前に、シグナル django.db.models.signals.pre_save を使用してデータを削除できます。このドキュメント は、それを理解するのに役立つかもしれません。

アップデート:

第 1 の方法: Keywordsが結果を保存するテーブルであるかどうかわかりません。結果を保存するテーブルである場合は、Filip Dupanović の提案に従って、データベース テーブルに検索結果を保存するコードの前に、views.pyKeywords.objects.all().delete()のコードを実行してください。

第 2 の方法: 前に説明したように、シグナルを使用してこれを行うこともできます。たとえば、models.py のモデルが次のようなものであるとします。

class Name(models.Model):
    name = models.CharField(max_length=200)

テーブルに新しい名前を保存する前に、以前のエントリをすべて削除したい場合は、次のようにします。

from django.db import models
from django.db.models import signals
from django.db.models.signals import pre_save

class Name(models.Model):
    name = models.CharField(max_length=200)

def delete_previous_records(**kwargs):
    try:
        Name.objects.all().delete()
    except:
        return False

pre_save.connect(delete_previous_records)

views.py でデータを保存する for ループの上にこのコードを追加します。

try:
    Keywords.objects.all().delete() #Deleting all previous records 
except: 
    return False
#your for loop starts here
for name, count1 in list:
    s = Keywords(file_name=name,frequency_count=count1)
于 2012-07-05T13:47:14.210 に答える
0

Match.objects.delete()新しい結果のコンパイルを開始する直前に、ビュー内の以前の結果をすべて消去するようなことをしてください。

于 2012-07-05T14:22:33.843 に答える