Django Modelforms:匹配的查询不存在并发布数据
我有一个字段,用户在其中选择车辆牌照,根据此选择,我希望从车辆表中填充表单(查询:Django Modelforms:匹配的查询不存在并发布数据,django,Django,我有一个字段,用户在其中选择车辆牌照,根据此选择,我希望从车辆表中填充表单(查询:vehicle=vehicles.objects.get(plate=plate))。 我用这样的观点来管理它: def vehicles_archive(request): user = request.user user_id = user.id u_id = user_id vehicles = Vehicles.objects.filter(own_id1 = u_id)
vehicle=vehicles.objects.get(plate=plate)
)。
我用这样的观点来管理它:
def vehicles_archive(request):
user = request.user
user_id = user.id
u_id = user_id
vehicles = Vehicles.objects.filter(own_id1 = u_id)
if request.method == 'POST':
plate = request.POST.get('searchPlate')
vehicle = Vehicles.objects.get(plate=plate)
form = VehiclesForm(data=request.POST, instance=vehicle, own_id=u_id)
if form.is_valid():
form.save()
return render_to_response('success.html', locals(), context_instance= RequestContext(request))
else:
vehicles = Vehicles.objects.filter(own_id1 = u_id)
vehicle = Vehicles.objects.get(plate=plate)
form = VehiclesForm(instance=vehicle, own_id=u_id)
return render_to_response('vehiclesArchive.html', locals(), context_instance= RequestContext(request))
一切似乎都很好,但当我编辑表单字段并尝试提交表单时,我得到:
车辆匹配查询不存在。
并用车牌表示查询。
我使用的逻辑一定有错误,但我如何解决它?或者有更好的方法实现上述功能吗
编辑:
而searchPlate是一个随机字段,仅用于获取用户选择。我认为车主模型的定义并不重要。我不明白的是: 我有一个用户选择车辆牌照的字段 这在哪里发生?在您发布的视图代码中 因为这看起来是一个两步的过程,而不是一步 a) 用户通过
vehicles\u archive
视图从列表中进行选择。这一观点
仅处理GET请求,因为它仅用于显示车辆
此用户拥有。此视图的url类似于r'^vehicles/$”
。
并且该列表将是一组条目,每个条目包括到相应车辆的链接。e、 g./vehicles/YKH4034/
。因此,我们需要在url.py中使用另一个url正则表达式
比如r'^vehicles/(?P\w{80})/$”
。以及处理此url的不同视图。
例如命名为车辆\u存档\u详细信息
b) 用户选择了要编辑的车辆,现在由车辆存档\u详细信息提供服务。此视图处理GET和POST请求。
获取以显示特定车辆的表单,并在何时发布
车主实际修改(提交表格)车辆
不过,我在您的代码中没有看到这种逻辑。也许我不明白
你的问题很好
更新:
您不需要GET参数(searchPlate),也不需要search
按钮。事实并非如此
表格。您的车辆档案视图将有一个类似于以下内容的模板:
{% extends 'somebaseview.html' %}
{% block content %}
<ul>
{% for vehicle in owner_vehicles %}
<a href="/vehicles/{{ vehicle.plate }}/"> {{ vehicle.plate }} </a>
{% endfor %}
</ul>
{% endblock %}
{%extends'somebaseview.html%}
{%block content%}
{owner_vehicles%%中车辆的百分比}
{%endfor%}
{%endblock%}
因此,用户只需单击一个链接,即可将其带到特定位置
他想编辑的车辆
更新2:
你说你需要一个下拉菜单和一个搜索按钮。但是我没有看到搜索结果
功能。是否有可能找不到该表格?有
当他“命中”时,可能会有多个结果(车辆)
搜索
无论如何,如果那是你真正需要的。我看到两种方式:
1) 使用Javascript和AJAX完成所有这些工作。虽然这对我来说很难
在这里显示一个示例,因为它会很长,而且不完整
你原来问题的范围
2) 使用django的工具
在任何情况下,您都可以首先确保第二步(用户查看/编辑特定车辆)正常工作,然后决定如何从步骤1过渡到步骤2。即
Ajax或表单向导。问题在于,您是通过外键的id而不是对象本身来查找外键的。例如:
vehicles = Vehicles.objects.filter(own_id1 = u_id)
要与own_id1
进行比较,您需要传递一个User
实例,而不是一个整数。如果要通过id查找,则需要执行以下操作:
vehicles = Vehicles.objects.filter(own_id1_id = u_id)
这也说明了为什么不应该在外键的名称中使用\u id
。在数据库级别,Django自动附加\u id
什么是模板?POST数据中是否有searchPlate
?如果控制流逻辑没有意义,请删除。您可以检查if request.method==POST
,尽管您已经在上面的6行中完成了检查。此外,您还有很多代码冗余。你能添加关于车辆和车主的完整车型定义吗?是的,我能感觉到问题在于两篇文章(其中一篇文章的情况相同)。我尝试重定向到另一个模板,模板为args,并在该模板中呈现表单,但使用该解决方案,用户无法在第一次选择模板后更改模板。我还能试什么?你需要做的很简单。如果您发布模型定义,则更容易为您提供解决方案。此外,在车辆窗体上,您经过kwargown\u id
。您的表单是否知道此参数?@marlen,在这种情况下,您对vehicle
的查询将按预期失败。你需要查询车牌searchPlate
似乎合法的车辆,我喜欢。但是当我尝试时,我选择了一个板块,点击搜索,url变成:../vehiclesArchive/?searchPlate=KY123,但是没有调用查看车辆\u archive\u详细信息(我还尝试了简单的打印)。怎么了?@marlen 1)我忘了在我提供的第一个正则表达式中添加$
。2) 请参阅更新的答案。我注意到$。是的,好的,它可以与链接一起工作,但是我需要(请求)一个带有图版的下拉列表,用户可以从中选择一个,通过点击搜索,相应的表单将被呈现..jquery和ajax是一个解决方案,我知道,我只是试图避免它,尽管我使用过它。我将检查此表单向导工具,因为我不知道它。感谢您的时间和总体帮助!:)@马伦很高兴我帮了忙。同时检查Chris Pratt的观察结果。除非您处理的是无法控制的遗留数据库,否则您应该遵循这些规则。实际上,它也适用于整数。但是关于假身份证,我看不出你的答案和我的问题有什么关系。关于ids的错误做法,您可能是对的(但这是一个遗留数据库),但有问题的查询是带有图版的查询,并且查询本身是成功的,问题在于我在视图中使用的两种形式的整个逻辑。但我现在有点改变了。
vehicles = Vehicles.objects.filter(own_id1_id = u_id)