gpt4 book ai didi

javascript - 用 Jquery 更新 Django 对象,可能吗?

转载 作者:行者123 更新时间:2023-11-30 17:23:11 25 4
gpt4 key购买 nike

我正在尝试使用 jQuery 更新表中已存在的 Django 对象(Company)。

我的代码执行得很好,Company 对象没有更新。

这是我的模板的摘录:

{% if companies %}
<tr class="gradeX">
{% for company in companies %}
<td>{{ company.name }}</td>
<td>{{ company.user.first_name }}</td>
<td>{{ company.created_on }}</td>
<td>Edit | Delete</td>
</tr>
{% endfor %}
{% else %}
<strong>There are no companies yet. <a data-toggle="modal" href="#addCompanyModal"> Do you want to create one?</a></strong>
{% endif %}

我试过的 JavaScript 是:

 <script type="text/javascript">
function save_company()
{
$form=$('#addCompanyForm');
var datastring = $form.serialize();
$.ajax({
type: "POST",
url: $form.attr('action'),
dataType: 'json',
data: datastring,
success: function(result)
{
$('#result').html('<div class="alert alert-success"> <strong>Well done!</strong> New company added.</div>');
$('#addCompanyModal').modal('hide');
list_companies();
},
error: function(result){
alert("failure:"+result.error);
}
});

//don't submit the form

return false;
}

function list_companies()
{

$.get('/panel/company/list/json/', function(data) {
$('#dynamic-table').html(data);
}
);
}
</script>

最后,这是我尝试过的 View :

def list_companies_json(request):
if request.is_ajax():
companies_list = Company.objects.filter(user=request.user).order_by('-name')
context_dict = {'companies': companies_list, 'form': form, 'errors': errors, 'success': success}
#context_dict = serializers.serialize('json', list(companies_list))
return render(request, 'panel/company/list_companies.html', context_dict)

最佳答案

当然是可能的,并且有很多方法可以做到这一点。抽象地说,您需要做的就是通过某种方式将前端传递给您的对象,以便 jQuery(或您想要使用的任何库/框架)可以告诉 Django 哪些对象需要更新。为了清楚起见,我假设您想要更新一个单个对象——但请注意,仅通过使用一个数组,这个相同的管道就可以扩展到多个对象标识符/引用,而不仅仅是我们将使用的标识符/引用。

一种方法是将 Django 对象的 id 传递到 HTML 中(免责声明:有更安全的方法可以做到这一点,但为了清晰的概念化,它就足够了)。例如,要传递每个 company 对象的 id,您可以使用:

{% for company in companies %}
...
<td class="companyID">{{ company.id }}</td>
...
{% endfor %}

假设您将每个 company 包装在某个包装器中,然后您可以使用一点 jQuery 获取您想要的 id:

var theCompany = ... // Maybe grabbed from a click? Really, it's up to you.
var theCompanyID = $(theCompany).find(".companyID").html();

然后,当您想对该对象执行一些“更新”时,只需将其包含在您发送回 View 的data 中即可。

var data = {"theCompanyID":theCompanyID, ... }
$.post("/myURL/", data, someCallback);

之后,您可以使用 MyObject.get(id=theObjectID) 获取相应的 Django 对象并根据需要更新它。

def myUpdateView(request):
# We'll wrap the "update" portion in a Try-Except in case the user passes us
# data that will break our update function. We should obviously check for
# this BEFORE we attempt to perform the update -- but always best to be safe.
try:
theCompanyID = request.POST["theCompanyID"]
theCompany = Company.objects.get(id=theCompanyID)

# ... Now do the updates you want.

theCompany.save()

return HttpResponse("Update successful!")

except:
return HttpResponse("Oh... Update failed...")

这是一个 more in-depth tutorial如果您想对此进行更多探索。

关于javascript - 用 Jquery 更新 Django 对象,可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com