НЕ УДАЛОСЬ СОХРАНИТЬ НАБОР ФОРМ 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>