Django是创建编辑模式表单的最佳方法吗?

时间:2020-07-10 07:24:54

标签: javascript django django-models django-forms django-views

在我的Django应用程序之一中,我设置了以下架构:

#models.py
    class Income(models.Model):
        price = models.DecimalField()
        quantity = models.DecimalField()
        date=models.DateField()



# forms.py
    class IncomeForm(forms.ModelForm):
        class Meta:
            model = Income
            fields = "__all__"

#views.py

def income_(request):
    elements = Income.objects.all()
    if request.method == 'POST':
         form = IncomeForm(request.POST)
         if form.is_valid():
             new_input = form.save()
    else :
       form = IncomeForm()
       elements = Income.objects.all()

    context= {
       'form': form,
       'elements':elements,
            }
    return render(request, "income/income.html", context)

在我的Income.html文件中,我设置了以下内容

{% load crispy_forms_tags %}
 <form id="" method="post">                    
   <div class="form-group col-2 0 mb-0" >
       {{form.quantity|as_crispy_field}}
   </div>
   <div class="form-group col-2 0 mb-0" >
       {{form.price|as_crispy_field}}
   </div>
   <div class="form-group col-2 0 mb-0" >
      {{form.date|as_crispy_field}}
   </div>
</div>

之后,我创建了一个表,列出了所有填充的数据。 现在,我想为每行创建一个按钮,以打开模式窗体,这使我可以修改每个id数据集的特定数据。

我试图通过ajax调用来执行它,但是我很难执行表格和数据类型(因为以这种方式,我无法使用简洁的表格或表格模型django框架)。

所以我的问题是:有一种简单的方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

根据我对问题的了解,您可以尝试在view.py中创建一个UpdateView,然后将带有对象ID的html按钮重定向到该视图。

更新的答案- 因为您正在寻求实现编辑页面的更简单方法...

- models.py
    class Income(models.Model):
        price = models.DecimalField(decimal_places=2, max_digits=10000)
        quantity = models.DecimalField(decimal_places=2, max_digits=10000)
        date = models.DateField()

- urls.py
    urlpatterns = [
        path('income/', views.IncomeListView.as_view(), name='income'),
        path('income_edit/<int:pk>', views.IncomeEdit.as_view(), name='income-edit'),
    ]

- views.py
    class IncomeListView(ListView):
        model = Income
        template_name = 'income.html'


    class IncomeEdit(UpdateView):
        model = Income
        form_class = IncomeForm
        template_name = "income_form.html"

- forms.py
    class IncomeForm(forms.ModelForm):
        class Meta:
            model = Income
            fields = '__all__'

- income.html
    <h1>Income List</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>price</th>
            <th>quantity</th>
            <th>date</th>
        </tr>
    {% if income_list %}
      {% for income in income_list %}
        <tr>
            <td>{{income.id}}</td>
            <td>{{income.price}}</td>
            <td>{{income.quantity}}</td>
            <td>{{income.date}}</td>
            <td><a href="{% url 'income-edit' income.id %}">Edit</a> </td>
        </tr>
      {% endfor %}
    {% endif %}
    </table>

- income_form.html
    <form action="" method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit">
        {{ form.media }}
    </form>

请查看用于更多信息和理解的类。希望有帮助=)