繁体   English   中英

Django 和 ajax 请求:ValueError:无法分配必须是实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM