Django Ajax POST请求:内部s

2024-10-01 04:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

请注意,自从我最近开始工作以来,我在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模板:

^{pr2}$

这是我的网址:

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。在


Tags: nameiddatagetmodelsnotoptionsupload
2条回答

这里有些奇怪的事情:

  1. 您发出POST请求,但是视图没有任何副作用,POST也不会传输任何数据。在这种情况下,GET更有意义
  2. 根据success句柄,结果看起来应该是一个带有键onct的字典;并且
  3. 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请求可能看起来像:

^{pr2}$

此外,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。在

您在调用data.append()时没有先定义数据。在

也许你也想要

data = [{"onct": onct}]

或者

^{pr2}$

相关问题 更多 >