【问题标题】:ValueError: Cannot assign must be an instance in DjangoValueError:无法分配必须是Django中的实例
【发布时间】:2020-11-30 10:12:54
【问题描述】:

我是 django 新手,我正在尝试通过表单将一些数据插入数据库,但在插入数据时出现错误。我该如何解决这个问题?

我有这些连接在一起的模型:

models.py

class Major(models.Model):
    major_cd = models.IntegerField(primary_key=True)
    description = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'major'

class Percentages(models.Model):
    # major_cd = models.IntegerField(primary_key=True)
    major_cd = models.OneToOneField(
        Major,
        on_delete=models.CASCADE,
        primary_key=True,
        db_column='major_cd'
    )
    perc = models.FloatField()

    class Meta:
        managed = False
        db_table = 'percentages'

这是我的发件人:

每个.html


<form id="addPercentage" action="">     

    <div class="form-group row">
        <div class="form-group col-md-2">
            <input class="form-control" type="number" name="major_cd" placeholder="Major Code" required min=1000 max=9999>
        </div>
        <div class="form-group col-md-2">
            <input class="form-control" type="number" name="perc" placeholder="Percentage" required>
        </div>
    </div>

    <div class="form-group col-md-2" style="padding-right: 2%;">
        <button class="btn btn-info form-control" type="submit">ADD</button>
    </div>
       
</form>

脚本:

$("form#addPercentage").submit(function() {
    var majorCodeInput = $('input[name="major_cd"]').val().trim();
    var perc_Input = $('input[name="perc"]').val().trim();
    
    if (majorCodeInput  && perc_Input) {
        // Create Ajax Call
        $.ajax({
            type: 'POST',
            url: '{% url "create-percentages" %}',
            enctype: 'multipart/form-data',
            data: {
                'major_cd' : majorCodeInput,
                'perc' : perc_Input,  
            },
            dataType: 'json',
            success: function (data) {
                if (data.Perc) {
                  appendToPerTable(data.Perc);  // Funcion to append data
                }
            }
        });
      } else {
        alert("All fields must have a valid value.");
    }
    $('form#addPercentage').trigger("reset");
    return false;
});

views.py:

class CreatePercentage(View):
    def  post(self, request):
        major_cd = request.POST.get('major_cd', None)
        perc = request.POST.get('perc', None)
       
        obj = Percentages.objects.create(
            major_cd =  major_cd,
            perc = perc,
        )

        Perc = {'major_cd':obj.major_cd,'perc':obj.perc }

        data = {
            'Perc': Perc
        }
        return JsonResponse(data)

错误:


ValueError:无法分配“'9999'”:“Percentages.major_cd”必须是“Major”实例。

提前致谢!

【问题讨论】:

  • major_cd 需要实例,所以需要使用major_cd_id=major_cd
  • 你也应该好好看看 Django 的表单,它们让你做的事情更容易。

标签: python django django-models django-views django-forms


【解决方案1】:
    obj = Percentages.objects.create(
        major_cd =  major_cd,
        perc = perc,
    )

当你这样做时,major_cd 是字符串“9999”,它应该是一个Major 实例。所以你必须这样做,如果你确定major_cd 实例存在:

    obj = Percentages.objects.create(
        major_cd =  Major.objects.get(major_cd=int(major_cd)),
        perc = perc,
    )

【讨论】:

  • 我想我理解这个问题,问题是我正在插入一个新数据,它甚至不存在于 Major 表中。我必须先插入到主要模型中,然后再插入到百分比模型中吗?
  • 是的,你必须这样做。
  • 在我的情况下它无法获取major_cd的值
猜你喜欢
  • 2021-05-05
  • 2018-06-03
  • 1970-01-01
  • 2019-11-14
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多