[英]Django and ajax request: ValueError: Cannot assign must be a instance
我正在尝试在我的 django 模态中集成一个 ajax 调用来直接修改我的数据的值。 换句话说,我有以下views.py
class UpdateCrudUser(View):
def get(self, request):
id1 = request.GET.get('id', None)
conto1 = request.GET.get('conto', None)
obj = Materiale.objects.get(id=id1)
obj.conto = conto1
obj.save()
element = {
'id':obj.id,
'conto':obj.conto}
data = {
'element': element}
return JsonResponse(data)
之后,我在我的表之前构建如下:
{% for element in elements %}
<tr id="element-{{element.id}}">
<td class="elementConto userData" name="conto">{{element.conto}}</td>
</tr>
{% endfor %}
...然后是模态:
<form id="updateUser">
<div class="modal-body">
<input class="form-control" id="form-id" type="hidden" name="formId"/>
<label for="conto">Conto</label>
<input class="form-control" id="form-conto" name="formConto"/>
最后使用 ajax 调用的脚本:
function editUser(id) {
if (id) {
tr_id = $("#element-" + id);
conto = $(tr_id).find(".elementConto").text();
$('#form-id').val(id);
$('#form-conto').val(conto);
}
}
$("form#updateUser").submit(function() {
var idInput = $('input[name="formId"]').val();
var contoInput = $('input[name="formConto"]').val();
if (contoInput && tipologiaInput ) {
// Create Ajax Call
$.ajax({
url: '{% url "crud_ajax_update" %}',
data: {
'id': idInput,
'conto': contoInput,
},
dataType: 'json',
success: function (data) {
if (data.element) {
updateToUserTabel(data.element);
}
}
});
} else {
alert("Vediamo se funziona.");
}
$('form#updateUser').trigger("reset");
$('#myModal').modal('hide');
return false;
});
但是,如果我尝试使用模态修改我的数据,django 会给我以下错误:
ValueError: Cannot assign "'Materia Prima'": "Materiale.conto" must be a "Conto" instance.
这个错误可能是由 model 引起的?因为 conto 是一个foreingKey:
class Materiale(models.Model):
conto = models.ForeignKey(Conto, on_delete=models.CASCADE, null=True)
class Conto(models.Model):
nome=models.CharField('Nome Conto', max_length=30, blank=True, default="")
def __str__(self):
return self.nome
在这种情况下,我该如何克服这个问题?
在您的UpdateCrudUser
中,变量conto1
已被分配为一个字符串,更准确地说,当您执行此操作时: conto1 = request.GET.get('conto', None)
。
然后,当您实例化Materiale
model(通过obj
对象)时,您尝试将该字符串设置为其conto
字段,该字段需要Conto
Z20F35E630DAF44DBFA4C3F68F5399D 的 object,而不是字符串。
如何克服这一点? 与其直接将该字符串分配给obj.conto
,不如先进行查询以通过其字段名获取Conto
nome
。 在您的UpdateCrudUser
视图中是这样的:
obj = Materiale.objects.get(id=id1)
conto_obj, created = Conto.objects.get_or_create(nome=conto1)
obj.conto = conto_obj
请注意,我使用了get_or_create()
方法,因为如果用户输入的Conto
名称与任何现有的 object 不匹配,这将创建一个新的Conto
object,然后可以将其分配给要更新的Materiale
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.