Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在django模型中保存从模板获取的对象列表?_Python_Django_Django Rest Framework_Django Views_Save - Fatal编程技术网

Python 如何在django模型中保存从模板获取的对象列表?

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.

我正在使用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.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>&times;</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()