【问题标题】:Django using template input data to create new objectsDjango 使用模板输入数据创建新对象
【发布时间】:2022-01-24 18:29:19
【问题描述】:

由于我缺乏技能,我认为我过于复杂,并希望获得一个简单解决方案的输入。我正在创建一种网上商店模板。我有一份服务工作订单,我想向其中添加零件。我有一个看起来不错的模板,我可以在其中列出适合机器模型的所有部件,然后过滤它们。

一个工作订单很多零件(所以我有一个单独的类用于工作订单的所有零件对象)。因此,为了避免必须使用创建视图按零件编号更新零件编号。我尝试使用列表视图来尝试同时选择所有部分。

在我的 CBV 中,我定义了过滤并获得了一个包含所有部件的上下文“部件列表”以显示在表格中。在模板中,我创建了一个输入字段 qty。 IE。 “零件清单”中的所有零件都有一个“数量”输入字段。

在我的帖子或保存定义中,我可以简单地使用 self.request.GET 语句捕获所有输入字段数据,还是可以使用上下文“Partslist”来遍历字段?

models.py

class WorkOrderParts(models.Model):
    wo_num = models.CharField(max_length=30, verbose_name='Order Number')
    wo_pa_number = models.CharField(max_length=30, verbose_name='Part Number')
    wo_pa_qty_def = models.DecimalField(max_digits=3,decimal_places=0,verbose_name='Qty Planned for')

class Parts(models.Model):
    pa_number = models.CharField(max_length=30,verbose_name='Part Number')
    pa_group1 = models.CharField(max_length=30,verbose_name='Group of Parts')
    pa_group2 = models.CharField(max_length=30,verbose_name='2:nd Group of Parts')
    pa_fits = ArrayField(models.CharField(max_length=20,verbose_name='models that part fit to (BRAND-MODEL)'),default=list, null=True, blank=True)

views.py

class WO_PartCreate(LoginRequiredMixin,ListView):
    login_url = '/login'
    template_name = 'AddPart.html'
    model = WorkOrderParts


    def get_context_data(self, **kwargs):
        model = 'my machine model'
        qs=Parts.objects.filter(pa_fits__icontains=model)
        context = super().get_context_data(**kwargs)
        context['Partslist'] = qs
        return context
    
   def post(self):
   ??? This is where I want to take all parts with input qty>0 and update new objects into WorkOrderParts. 

AddPart.html

<table>
            <thead>
                <tr>
                    <th class="text-left">Part Number</th>
                    <th class="text-left">Quantity</th>
                </tr>
            </thead>

            {% for item in Partslist %}
           <tbody>
            <tr>
                    <td class="text-left">
                        {% autoescape off %}{{item.pa_number}}{% endautoescape %}<br>
                    </td>

                    <td class="text-left">
                       <input type="number" method="GET" name="{{ item.pa_number }}-Qty"/>
                    </td>
                  
            </tr>
          </tbody>

我希望我已经能够解释得足以让别人理解我。我使用表格的原因只是因为我想要显示更多的数据。

【问题讨论】:

    标签: django-views django-templates


    【解决方案1】:

    好的,我知道很可能有更好的方法来解决这个问题。但由于我至少能够找到一些有用的东西,所以我想我会与其他人分享。

    它至少解决了我从动态列表中获取输入字段并对其进行处理的迫切需要。

    views.py

        class AddPartTest(LoginRequiredMixin,ListView):
        login_url = '/login'
        template_name = 'AddPart.html' 
        model = Parts
        form_class = Add_Parts2 ##including selected fields
    
        def get_context_data(self, **kwargs):
            order = self.kwargs.get('str')
            wo = WorkOrder_main.objects.get(order=order)
            model = wo.wo_machine_model
            qs=Parts.objects.filter(pa_fits__icontains=model)
            first_contains_query = self.request.GET.get('pa_group1')
            if is_valid_queryparam(first_contains_query):
                qs=qs.filter(pa_group1=first_contains_query)
                second_contains_query = self.request.GET.get('pa_group2')
            if is_valid_queryparam(second_contains_query):
                qs=qs.filter(pa_group2= second_contains_query)
                context = super().get_context_data(**kwargs)
                context['Partslist'] = qs
            return context
    
        def post (self, request, *args, **kwargs):
            order = self.kwargs.get('str')
            context = self.get_context_data()
            Partslist_x = context['Partslist']
            Parts_num_list = Partslist_x.values_list('pa_number', flat=True)
            for part in Parts_num_list:
                qty = part + 'Qty'
                Qty = self.request.POST.get(qty)
                if int(Qty)==0:
                    pass
                else:
                    WorkOrderParts.objects.create(
                                    wo_num=order,
                                    wo_pa_number=part,
                                    wo_pa_qty_def=Qty,
                                )
            path='where I want to end up'
            return redirect (path)
    

    【讨论】:

    • Stackoverflow 是一个问答网站。专注于解释为什么你的答案是好的,不要担心个人问题。
    猜你喜欢
    • 2020-03-14
    • 2020-07-14
    • 2015-11-11
    • 2013-04-11
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多