我有一个表单字段,其输入为基因名称。它在我的模型数据库gene_names中搜索基因名称字段。当用户输入名称时,我需要自动完成。我被建议使用jQuery。我搜索并找到以下链接
http://flaviusim.com/blog/AJAX-Autocomplete-Search-with-Django-and-jQuery/
和其他人也...... 基于它们我写了下面的代码。它没有给出任何错误,但它不起作用。
models.py
class GeneList(models.Model):
gene_name = models.CharField(max_length=10)
base.html中的
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="http://code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" type="text/css" media="all" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript">
</script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js" type="text/javascript"></script>
在模板文件呈现表单中
<form method="POST">
{% csrf_token %}
<h4>Gene Name   {{ form.gene_p }}</h4>
<button type="submit">After giving gene name Click here!</button>
</form>
...
...<div class="ui-widget">
<label for="genes">Gene: </label>
<input id="id_gene_p"> <!-- id_gene_p because thats what inspect element
shows
id for Gene name form field -->
</div>
<script type="text/javascript">
$(document).ready(function(){
var gene_input=$('input[id="id_gene_p"]');
gene_input.autocomplete({
source: "/filesapp/api/get_gene_names/",
minLength: 2
});
} );
id_gene_p因为那是检查元素显示基因名称表单字段的ID
投放urls.py
from filesapp import views
urlpatterns = [
...
...
url(r'^api/get_gene_names/', views.get_gene_names, name='get_genes'),
]
views.py
from filesapp.forms import FileForm
from filesapp.models import GeneList
import csv
import json
...
def load_genes(file_path):
#"this loads gene from file with gene name"
reader = csv.DictReader(open(file_path))
for row in reader:
gene = GeneList.objects.create(gene_name=row[0])
gene.save()
def get_gene_names(request):
all_gene_names = GeneList.objects.all()
if request.is_ajax():
q = request.GET.get('term', '')
gene_names = [g['good_name'] for g in all_gene_names if q in g["input_name"]]
gene_names = set(gene_names) #removing duplicates
results = []
for gn in gene_names:
gn_json = {'value': gn}
results.append(gn_json)
data = json.dumps(results)
else:
data = 'fail'
mimetype = 'application/json'
return HttpResponse(data, mimetype)
我的forms.py文件在大多数讨论中没有被讨论
from filesapp.models import GeneList
class FileForm(forms.ModelForm):
gene_p = forms.CharField(widget=forms.TextInput(
attrs = { 'class': 'form-control',
'placeholder': 'Write the name of gene manipulated in above
sample pairs. eg. Wnt',
}
))
请等待任何建议。 或者你看到的任何错误。 让我知道是否有任何其他更简单的方法是可能的,因为我是新手,因此没有太多的背景。 如果您需要更多信息来解决此问题,请告诉我们。 感谢。
它不起作用。我尝试了所有的建议,没有效果。