首页 > 解决方案 > Django 将动态名称属性的动态字段添加到前端,然后将其插入到模型中

问题描述

我有一个包含近 500 多个字段的模型。我想通过前端表单获取数据。但问题是我无法显示所有 500 个字段。

我想要的是我将添加我需要的字段。就像第一天一样,我将添加 3 个字段。食物 = 230 ,汽油 = 500,租金 = 700。第二天,田地可能会有所不同。我可以在第二天添加 20 个字段。第三天的数据可能属于不同的字段。比如汽油 = 200,水泥 = 5000,钢铁 = 100 等等等等!

简单的解决方案是:我将所有字段显示为 HTML 并提交给查看,并通过 Post Request 在 View 函数中接收!然后保存()。但我希望它是动态的!

if request.method == 'POST':
        print("this is post")
        # print()
        food_expense=request.POST['food']
        petrol_expense=request.POST['petrol']
        easyload_expense=request.POST['easyload']
        labour_expense = request.POST['labour']
        equipments_expense = request.POST['equipments']
        rent_expense = request.POST['rent']
        cement_expense = request.POST['cement']
        steel_expense = request.POST['steel']
        other1_expense = request.POST['other1']
        other2_expense = request.POST['other2']
        other3_expense = request.POST['other3']
        ..... .... fields upto 500+ 
        # expense_paidby = request.POST['paid_by']
        expense_paidby_id = request.POST['paid_by']
        paidby= PaidBy.objects.get(id=expense_paidby_id)
        # expense_paidby = PaidBy.objects.get(name__icontains = request.POST['paid_by'])
        projectname_id= request.POST['pname']
        project_in_which_expenses_made=ProjectName.objects.get(id=projectname_id)
        # project_in_which_expenses_made = request.POST['project_name']
        date = request.POST['date']
        # total = food_expense+petrol_expense+easyload_expense+labour_expense+equipments_expense+rent_expense
        # print(petrol_expense, projectname_id , project_in_which_expenses_made)
        inst= ProjectExpenses(food=food_expense,petrol=petrol_expense,easyload=easyload_expense ,labour=labour_expense ,
                              equipments=equipments_expense ,rent=rent_expense,cement=cement_expense,steel=steel_expense,
                              other1=other1_expense, other2=other2_expense, other3=other3_expense, date_of_expense=date, PaidByName=paidby,
                              expenses_in_project = project_in_which_expenses_made)
        #in query i will have 500 fields.
        inst.save()

我想要的是如何创建具有数据库中名称属性的动态输入字段。

我应该如何在前端动态创建这些字段,然后我将如何在视图函数中处理它,而不是通过“value = request. post[“500+ fields line by line”]”的意思是我如何只动态处理那些来查看功能的字段。然后将其保存到数据库。

数据只会插入选定的字段,所有剩余的默认为零。

我将感谢论坛帮助。

标签: pythondjangodjango-modelsdjango-viewsdjango-forms

解决方案


我不确定我是否正确理解了您的问题。也许一个更简单的工作示例会澄清。

但是,您是否尝试过使用模型表单,例如 CreateView?

您可以通过将 CreateView 添加到您的 urlpatterns 来根据您的模型定义动态创建输入表单和处理。

from django.views.generic.edit import CreateView
from .models import ProjectExpenses
urlpatterns += [path("new-project-expense", CreateView.as_view(model=ProjectExpenses, fields="__all__"))]

您可以将“字段”参数配置为您的 500 个模型字段的选择。


推荐阅读