Ошибка значения: невозможно назначить, должен быть экземпляр в Django

#python #django #django-models #django-views #django-forms

#python #django #django-модели #django-представления #django-forms

Вопрос:

Я новичок в 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'
 

это мой из:

per.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  amp;amp; 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)
 

Ошибка:


Ошибка значения: невозможно назначить «‘9999′»: «Percentages.major_cd» должен быть «Основным» экземпляром.

Заранее спасибо!

Комментарии:

1. major_cd требуется экземпляр, поэтому вам нужно использовать major_cd_id=major_cd .

2. Вы также должны внимательно изучить формы Django, они делают то, что вы делаете, намного проще.

Ответ №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,
    )
 

Комментарии:

1. Я думаю, что понимаю проблему, проблема в том, что я вставляю новые данные, которых даже нет в основной таблице. Должен ли я сначала вставить в основную модель, а затем вставить в модель процентов?

2. Да, вы должны.

3. в моем случае невозможно получить значение major_cd