Django用related_name查询报Cannot resolve keyword 'vuelos'错误如何解决?
问题根因
你混淆了Django ORM中related_name的作用对象:related_name是定义给被关联的模型使用的反向查询名称,不是当前定义字段的模型的属性。
你在Pasajero模型的persona外键字段上设置了related_name="vuelos",这意味着vuelos是Persona模型的反向查询属性(可以用某Persona实例.vuelos.all()查询该人关联的所有乘客记录),而非Pasajero模型自身的字段。
Pasajero和Vuelo关联的多对多字段实际名为vuelo,所以你直接用vuelos做查询条件自然会提示字段不存在。
修正方案
需要修改两处错误代码:
- 修改
vuelos视图中的查询语句:
将原代码
non_pasajeros=Pasajero.objects.exclude(vuelos=vuelo).all()
替换为
non_pasajeros=Pasajero.objects.exclude(vuelo=vuelo).all()
- 修改
reserva视图中的关联添加语句:
将原代码
pasajero.vuelos.add(vuelo)
替换为
pasajero.vuelo.add(vuelo)
另外你现有代码中reserva视图的重定向语句也存在参数格式错误,单个参数需要封装为元组,否则会触发参数数量异常,建议同步修改:
将原代码
return HttpResponseRedirect(reverse("vuelo", args=vuelo.id))
替换为
return HttpResponseRedirect(reverse("vuelo", args=(vuelo.id,)))
内容的提问来源于stack exchange,提问作者Beto
相关产品推荐
相关产品推荐

