НЕ УДАЛОСЬ СОХРАНИТЬ НАБОР ФОРМ DJANGO INLINE С HTML-ВВОДОМ В БАЗУ ДАННЫХ

Я пытался вернуть данные из Purchase Order Model в Grn Form и хочу сохранить их в Grn Model, но не могу сохранить. Вот мой класс представления и форма grn, которые возвращают данные, но не могут сохранить в db

class view.py

class CreateGrn(LoginRequiredMixin, CreateView):
    model= GrnModel
    template_name = "inventory/grn_create.html"

class GrnCreate(LoginRequiredMixin, CreateView):
    model = GrnModel
    template_name = "inventory/grn_create.html"
    form_class = GrnForm
    success_url = reverse_lazy("/")

    def get_context_data(self, **kwargs):
        data = super(GrnCreate, self).get_context_data(**kwargs)
        if self.request.POST:
            data['formset'] = Grn_LineItemFormset(self.request.POST)
        else:
            data['formset'] = Grn_LineItemFormset()
            data['grn_no'] = GrnModel.objects.filter(company_grn = self.request.user.first_name).order_by('-id')[:1]
            pk = self.kwargs["pk"]
            data['form_lpo'] = PurchaseOrderModel.objects.get(pk = pk)
            #data['lpo_line_item'] = data['form_lpo'].purchaseorder_lineitem_set.all()
        return data

    def form_valid(self, form):
        context = self.get_context_data()
        formset = context['formset']
        with transaction.atomic():
            form.instance.grn_user = self.request.user
            self.object = form.save()

            if formset.is_valid():
                formset.instance = self.object
                formset.save()
        return super(GrnCreate, self).form_valid(form)

html шаблон

Когда я попытался использовать альтернативные средства, такие как функция view get data, но сохранить только форму и игнорировать formset

function view.py

def GrnCreate(request, **kwargs):
    pk = kwargs.get('pk')
    form_lpo = get_object_or_404(PurchaseOrderModel, pk = pk)
    lpo_line_item = form_lpo.purchaseorder_lineitem_set.all()


    if request.method == 'GET':
        formset = Grn_LineItemFormset(request.GET or None)
        form = GrnForm(request.GET or None, instance=form_lpo)
    elif request.method == 'POST':
        formset = Grn_LineItemFormset(request.POST)
        form = GrnForm(request.POST, instance=form_lpo)
        
        if form.is_valid():
            grnmodel= GrnModel.objects.create(vendor_name=form.data["vendor_name"],
                    grn_number=form.data["grn_number"],
                    lpo_number=form.data["lpo_number"],
                    vat=form.data["vat"],
                    address = form.data["address"],
                    date =form.data["date"],
                    vendor_invoice_number = form.data["vendor_invoice_number"], 
                    descriptions=form.data["descriptions"],
                    currency = form.data["currency"],
                    means_of_quote =form.data["means_of_quote"], 
                    grn_amount=form.data["grn_amount"],
                    grn_vat = form.data["grn_vat"],
                    total_grn=form.data["total_grn"],
                    )

        if formset.is_valid():
            for form in formset:
                type = form.cleaned_data.get('type')
                item = form.cleaned_data.get('item')
                quantity_remaining = form.cleaned_data.get('quantity_remaining')
                quantity_to_receive = form.cleaned_data.get('quantity_to_receive')
                rate = form.cleaned_data.get('rate')
                amount = form.cleaned_data.get('amount')
                if type and item and quantity_remaining and quantity_to_receive and rate and amount:
                    Grn_LineItem(vendor_name=grnmodel,
                            type=type,
                            item=item,
                            quantity_remaining=quantity_remaining,
                            quantity_to_receive=quantity_to_receive,
                            rate=rate,
                            amount=amount).save()
            grnmodel.save()
            return redirect('purchase_order_list')  
    context = {
        "formset": formset,
        "form": form,
        "grn_no":grn_no,
        "form_lpo":form_lpo,
        'lpo_line_item':lpo_line_item,
    }
    return render(request, 'inventory/grn_create.html', context)

Пожалуйста, помогите решить, я еще новичок. Спасибо

проверьте эту часть кода :

                if type and item and quantity_remaining and quantity_to_receive and rate and amount:
                **strong text**Grn_LineItem(vendor_name=grnmodel,
                        type=type,
                        item=item,
                        quantity_remaining=quantity_remaining,
                        quantity_to_receive=quantity_to_receive,
                        rate=rate,
                        amount=amount).save()

есть вероятность, что одна из переменных всегда пуста, что ни одна из форм не сохраняет! возможно!

@babak, я пробовал использовать сам формсет без возврата данных из бд, а в шаблоне формсета сделал так

{{ formset.management_form }}
{% for formset in formset %}<!--form_lpo.purchaseorder_lineitem_set.all %}-->
 <tr>
    <td>{{ formset.type_of_service }}</td>
    <td>{{ formset.item }}</td>
    <td>{{formset.quantity_remaining}}</td>
    <td>{{formset.quantity_to_receive}}</td>
    <td>{{ formset.rate }}</td>
    <td>{{formset.amount}}</td>
   </tr>   
   {% endfor %}

все работает нормально, я могу предположить, что проблема в том, как сохранить набор форм с html вводом <td><input class="form-control input" value="{{ lpo_line_item.type_of_service }}"></td>

Вернуться на верх