我有一个小问题,我没有克服解决的办法。我的list of Django objects
文件中生成了一个views.py
,我想在我的Javascript
部分中显示这些变量。
我在Javascript代码中获得了列表,但每个变量均为'undefined'
。
在我的views.py文件中,我有:
context['results2'] = SubMethod.objects.values_list('name', flat=True).all()
使用此模型:
class SubMethod(EdqmTable):
name = models.CharField(verbose_name=_('name'), max_length=80, unique=True)
def __str__(self):
return self.name
然后,在我的HTML / JS部分:
function get_sub_method_options(keep_cur) {
var sel_option = $('select#id_method-group').find("option:selected");
var sel_val = sel_option.val();
if (!sel_val) {
$("select#id_method-sub_method").empty();
var all_sub_methods = "{{ results2 }}";
console.log(all_sub_methods.name);
for (var i = 0; i < all_sub_methods.length; i++) {
$("select#id_method-sub_method").append('<option value="' + all_sub_methods[i].id + '">' + all_sub_methods[i].name + '</option>'); //here add list of all submethods
}
return;
}
data = {
'test_method': $('select#id_method-test_method').find("option:selected").val(),
'group': sel_val
};
$.ajax({
method: "GET",
url: '{% url 'ajax_method_submethod' %}',
data: data
}).done(function (result) {
reset_select('id_method-sub_method');
for (var i = 0; i < result['results'].length; i++) {
if (keep_cur > 0 & keep_cur == result['results'][i].id)
$("select#id_method-sub_method").append('<option value="' + result['results'][i].id + '" selected>' + result['results'][i].text + '</option>');
else
$("select#id_method-sub_method").append('<option value="' + result['results'][i].id + '">' + result['results'][i].text + '</option>');
}
;
});
}
如您所见,我在这一部分中提取了上下文变量result2
:
if (!sel_val) {
$("select#id_method-sub_method").empty();
var all_sub_methods = "{{ results2 }}";
console.log(all_sub_methods.name);
for (var i = 0; i < all_sub_methods.length; i++) {
$("select#id_method-sub_method").append('<option value="' + all_sub_methods[i].id + '">' + all_sub_methods[i].name + '</option>'); //here add list of all submethods
}
return;
}
在我的终端机上,我得到:
<QuerySet ['50% cell culture infective dose (CCID50)', 'Acetic acid in synthetic peptides', 'Acid value', 'Adenylate cyclase', ...]>
但是在我的Javascript部分中,它显示为:
你知道为什么吗?
编辑:
在我的django代码中,count()
显示450
在我的JS代码中:length
显示684
在我的数据库中:我有450个元素
答案 0 :(得分:1)
您需要先将查询集转换为列表。 JS不读取查询集。
context['results2'] = list(SubMethod.objects.values_list('name', flat=True).all())
,并且您可能希望跳过results2
并在JS侧加引号,并避免使用安全的屁股,以防止转义字符:
var all_sub_methods = {{ results2|safe }};