Python 如何在django模型中保存从模板获取的对象列表?
我正在使用django,我想在我的模型“Detail_Equipment”中保存数据列表: 这是我想要保存数据的模型:Python 如何在django模型中保存从模板获取的对象列表?,python,django,django-rest-framework,django-views,save,Python,Django,Django Rest Framework,Django Views,Save,我正在使用django,我想在我的模型“Detail_Equipment”中保存数据列表: 这是我想要保存数据的模型: class Detail_equipement(models.Model): equipements=models.ForeignKey(Equipement,on_delete=models.CASCADE,default=True) interventions=models.ForeignKey(Intervention,on_delete=models.
class Detail_equipement(models.Model):
equipements=models.ForeignKey(Equipement,on_delete=models.CASCADE,default=True)
interventions=models.ForeignKey(Intervention,on_delete=models.CASCADE)
QTE = models.IntegerField()
国外关键设备型号:
class Equipement(models.Model):
nom_equipement = models.CharField(max_length=60)
qte_stock=models.IntegerField()
prix_equipement = models.CharField(max_length=600)
这是我向视图发送数据时的html模板:
{% block content %}
<div class="row">
<div class="col-md-6 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Ajouter Intervention</h4>
<form id="modal_form_signup" method="POST">
{% csrf_token %}
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
<i class="fa fa-lock mr-1"></i>Detail Equipement Utiliser
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span>×</span>
</button>
</div>
<div class="modal-body">
<div class="form-row">
{% for equipment in interv.equipements.all %}
<div class="col-sm-6">
<div class="form-group">
<label for="modal_signup_firstname">Equipement</label>
<div class="input-group">
<input type="text" id="modal_signup_firstname" name="equipements" value="{{ equipment.nom_equipement }}" class="form-control" placeholder="Equipement" disabled/>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="modal_signup_lastname">QTE</label>
<div class="input-group">
<input type="text" id="modal_signup_lastname" name="qte" class="form-control" placeholder="QTE" />
</div>
</div>
</div>
{% endfor %}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary">Confirmer</button>
</div>
</div>
</form>
</div>
</div>
{% endblock content %}
看起来您使用的是
getlist
而不是get
,并且发送的是简单的字符串,而不是项目列表。根据表单,视图可能如下所示(假设只有一个字段):
getlist
用于表单多选择和类似对象,如下所示:
<select name="equipements" id="equipements" multiple>
{% for equipment in interv.equipements.all %}
<option value="{{equipment.id}}">{{equipment.nome}}</option>
{% endfor %}
</select>
在模板中:
{% for equipment in interv.equipements.all %}
<div class="col-sm-6">
<div class="form-group">
<label for="modal_signup_firstname">Equipement</label>
<div class="input-group">
<input type="text" id="equipment_type_{{equipment.id}}" name="equipment_type_{{equipment.id}}" value="{{ equipment.nom_equipement }}" class="form-control" placeholder="Equipement" disabled/>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="modal_signup_lastname">QTE</label>
<div class="input-group">
<input type="text" id="equipment_{{equipment.id}}_qty" name="equipment_{{equipment.id}}_qty" class="form-control" placeholder="QTE" />
</div>
</div>
</div>
{% endfor %}
另外,default=True
在ForeignKey
字段中不起任何作用,您需要将您的模型更新到该字段,我的代码才能工作(或通过ajax在POST数据中传递干预值):
这可能需要一些调整,因为我看不到你的代码的其余部分,以确保它将工作。但希望它能让您开始。200不是错误代码!你好哦,谢谢你的回答,但是如果你能帮助我的话!如何将数据列表保存到我的数据库模型中?您只需对设备列表进行迭代,根据id获取设备对象,然后更新并保存它。然后使用get_或_create(我更新了代码以显示它,但查看下面的注释以了解其工作所需的更改)我将代码更新为使用get_或_create,但为了使用我的代码,您必须在POST数据中传递干预数据,或者在模型中将干预设置为blank=True和null=True。我发布的代码可以做到这一点,但您可能必须修改它才能在您的环境中正常工作。如果看不到整个错误,我将无能为力。很抱歉,但我发布的内容将起作用,但您必须进行实验才能了解它。还有其他方法可以做到这一点,但它们需要更多的代码。你必须进行实验。
<select name="equipements" id="equipements" multiple>
{% for equipment in interv.equipements.all %}
<option value="{{equipment.id}}">{{equipment.nome}}</option>
{% endfor %}
</select>
$("#mysubmitbutton").click(function(){
{% for equipment in interv.equipments.all %}
var equipment_{{equipment.id}} = $("#equipment_type_{{equipment.id}}").val();
var equipment_{{equipment.id}}_qty = $("#equipment_qty_{{equipment.id}}").val();
{% endfor %}
var equipments = [
{% for equipment in interv.equipments.all %}
{ id: equipment_{{equipment.id}}, qty: equipment_{{equipment.id}}_qty,
{% endfor %}
];
var form_field1 = $("#field1").val();
var csrfToken = $( "input[name='csrfmiddlewaretoken']");
//collect the rest of the form here
$.ajax({
ContentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '{% url 'Detail_equipement' %}',
data: { "equipments": equipments, 'form_field1': form_field1, ..., 'csrdmiddlewaretoken':csrftoken, })
.done(function(data) {
if (data.result === true){
alert(data.message);
}
});
});
{% for equipment in interv.equipements.all %}
<div class="col-sm-6">
<div class="form-group">
<label for="modal_signup_firstname">Equipement</label>
<div class="input-group">
<input type="text" id="equipment_type_{{equipment.id}}" name="equipment_type_{{equipment.id}}" value="{{ equipment.nom_equipement }}" class="form-control" placeholder="Equipement" disabled/>
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="modal_signup_lastname">QTE</label>
<div class="input-group">
<input type="text" id="equipment_{{equipment.id}}_qty" name="equipment_{{equipment.id}}_qty" class="form-control" placeholder="QTE" />
</div>
</div>
</div>
{% endfor %}
def terminer(request,pk):
get_interv= Intervention.objects.get(id=pk)
data = {}
if request.method=='POST' and request.is_ajax():
equipements = request.POST.getlist('equipments')
for e in equipements:
detail = Detail_equipement.objects.get_or_create(equipements__id=e['id'])
detail.QTE = e['qty']
detail.save()
if request.is_ajax():
return JsonResponse(data)
else:
context = {
'interv':get_interv,
}
return render(request, 'techniciens/terminer_interv.html',context)
class Detail_equipement(models.Model):
equipements=models.ForeignKey(Equipement,on_delete=models.CASCADE)
interventions=models.ForeignKey(Intervention,on_delete=models.CASCADE, blank=True, null=True)
QTE = models.IntegerField()