请注意,自从我最近开始以来,我是AJAX的入门者。
我正在使用Django 2.0和Python。
我试图以数组的形式返回不兼容选项的列表。
这是我的模特:
class Door(models.Model) :
image = models.ImageField(upload_to=upload_location)
color = models.ForeignKey(Color, on_delete=models.CASCADE)
price = models.DecimalField(max_digits=10, decimal_places=2, default='119.99')
not_comp_options = models.ManyToManyField(Option)
这是我的js模板:
$.ajax({
type: "POST",
url: "/get_not_compat_options/" + door_id,
data: "",
dataType: 'json',
success: function()
{
console.log(data.onct)
}
})
这是我的网址:
urlpatterns = [
# Other url patterns
path('get_not_compat_options', views.get_not_compat_options, name="get_not_compat_options")
]
这是我的观点:
def get_not_compat_options(request, door_id) :
onct = []
door = get_object_or_404(Door, id=door_id)
not_compat_options = door.not_comp_options
for option in not_comp_options.all() :
onct.append(option.name)
data.append({"onct": onct})
return JsonResponse(data)
很遗憾,在浏览器控制台中,我收到一条错误消息:500 (Internal Server Error)
PS:如果可以的话,我正在为服务器使用Nginx和gunicorn。
答案 0 :(得分:3)
您正在呼叫data.append()
而不先定义数据。
也许你想要
data = [{"onct": onct}]
或
data = {"onct": onct}
答案 1 :(得分:0)
这里有一些奇怪的事情:
success
句柄,看起来结果应该是带有键onct
的字典;和urls.py
中的url不包含door_id
参数。通过在查询中使用.values_list(..)
,我们还可以节省一些数据库带宽,并进一步提高视图的美观度:
def get_not_compat_options(request, door_id):
door = get_object_or_404(Door, id=door_id)
not_compat_options = door.not_comp_options
data = {'onct': list(not_comp_options.all().values_list('name', flat=True))}
return JsonResponse(data)
,那么AJAX请求可能如下所示:
$.ajax({
type: "GET",
url: "/get_not_compat_options/" + door_id,
data: "",
dataType: 'json',
success: function()
{
console.log(data.onct)
}
})
此外,urls.py
寿星可能看起来像:
urlpatterns = [
# Other url patterns
path('get_not_compat_options/<int:door_id>', views.get_not_compat_options, name="get_not_compat_options")
]
否则,此path(..)
无法接受door_id
。