#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