首页 > 解决方案 > 如何将模型集“绑定”到对象,填充它并在同一页面中进行编辑?

问题描述

我是 Django 和开发的新手。我有一个项目列表,当我单击测试的结果按钮时,我希望有一个用于该特定测试的模型表单集,我可以在其中填充它并在同一页面中进行编辑。我写的代码是“工作的”,但问题是当我填写表格并提交它时,它对所有测试的编辑都是一样的。

我希望你能理解我的解释(不是说英语的人)这是我的代码:

模型.py:

class ResultatTest(models.Model):
   id = models.AutoField(primary_key=True)
test = models.ForeignKey('Test',  on_delete=models.CASCADE)
services = models.CharField(max_length=30, choices=SERV_CHOICES)
notes = models.IntegerField(null=True)
comments = models.TextField()

def __str__(self):
    return self.services

视图.py:

def resultatTest(request, id):

id = get_object_or_404(Test, pk=id)
ResultatTestFormset = modelformset_factory(ResultatTest,  fields=('test', 'services', 'notes', 'comments'),extra=1)
if request.method == "POST":

    formset = ResultatTestFormset(request.POST)#queryset=form.object.filter(test=test_id)
    if formset.is_valid():
        instances = formset.save(commit= False)
        for instance in instances:
            instance.save()
else:
    formset = ResultatTestFormset()

return render(request, "Portail/Details/resultat.html", {'id': id,'formset': formset})

项目/test.html:

onclick ="window.location ='/resultat/{{test.id}}','_self';

网址.py:

path('resultat/<int:id>/',resultatTest,name='resultat'),

结果.html:

  <form action=""  method="post" id="resultatForm ">
 {% csrf_token %}
      <table id='supertable' border=1>
            {{ formset.management_form }}
             {% for form in formset %}

             {% if forloop.first %}
          <tr>
            {% for field in form.visible_fields %}
                 <td style="background: cyan; line-height:1; white-space:nowrap;width:500px;" >{{ field.label_tag }}</td><
             {% endfor %}
         </tr>
            {% endif %}
          <tr>
              {% for field in form.visible_fields %}
            <td style="background: white; line-height:1; white-space:nowrap;" > {{ field}}</td>
                {% endfor %}
         </tr>

{ % endfor %}

我已经尝试并搜索了很多东西,但我无法解决我的问题。

标签: djangodjango-forms

解决方案


推荐阅读