将列表作为参数传递给Django

时间:2019-11-30 15:25:22

标签: django django-urls

我在Django中有一个业务模型,需要从API插入信息。但是,我想避免数据库中的重复项。因此,每当用户单击特定的业务链接时,我需要检查它是否已经存在于数据库中,如果不存在,则必须将其插入数据库并查看结果。到目前为止,下面的代码是我所做的。

def checkBusiness(request, business):
    try:
        result = Business.objects.get(checkId=business.checkId)

    except Business.DoesNotExist:
        b = Business(name=business[0]['name'], street_address=business[0]['location']['address'], city=business[0]['location']['city'], state=business[0]['location']['state'], country=business[0]['location']['country'], category=business[0]['categories']['name'], distance=business[0]['location']['distance'], checkId=business[0]['id'])
        b.save()
        result = Business.objects.get(checkId=checkId)

    context = {
        'business': result,
    }

    return render(request, "MyDiary/checkBusiness.html", context)

这是我的路由的样子:

path('checkBusiness', views.checkBusiness, name='checkBusiness'),

这是我的html:

       {% for business in businesses %}
             <li>
                    /*business is a json file for specific business detail*/
                    <a href="{% url 'checkBusiness' business %}" > {{ business.name }}, {{ business.location.address }}, {{ business.location.postalCode }} </a>
             </li>
        {% endfor %}

1 个答案:

答案 0 :(得分:2)

您不能在URL中传递对象。您应该了解,{% url something %}只是在创建一个URL,即您在浏览器地址栏中看到的URL(准确地说是 path 部分)。网址路径不包含对象,它只是由/分隔的多个路径段,例如/businesses//businesses/49businesses/49/employees/

URL的 path 后可能包含查询字符串,该字符串是?之后的键/值的列表,例如/businesses/?type=industrial&size=500。在响应URL /businesses/的Django视图中,您将看到request.GET将具有键/值对{"type": "industrial", "size": 500}。要在模板中构造这样的URL,您只需将参数附加到URL字符串:

"{% url 'business_list' %}?type={{ business.type }}&size={{ business.size }}"

urls.py只是路径的列表,它没有考虑查询字符串。如果您有路径/businesses/的视图,则它将接受任何查询字符串(同样位于request.GET中)。

但是您应该从不永远不要在GET请求上写入数据库,因此传递这样的参数来在数据库中创建新记录是很重要的事情。

您应该使用方法POST创建一个<form method="post">,该方法将信息提交到您的视图(在request.POST中),并且在验证后,您的视图将在数据库中创建记录。它还可以检查记录是否已经存在。

(请注意,仅使用checkId进行检查无济于事,因为任何人都可以轻松更改ID,以便同一业务仍可以在您的数据库中重复,只是使用不同的ID。 )

相关问题