У меня есть страница, на которой пользователь может использовать флажок для выбора различных элементов (импортированных из базы данных). После отправки формы я хочу получить список элементов, выбранных пользователем (я использовал поле значения флажка в качестве идентификатора элемента)
Я сделал это с помощью TemplateView и переопределил метод публикации.
class SelectSaleInvoiceItemsFromSo(TemplateView):
template_name = 'salesApp/selectsiitemfromso.html'
def get_context_data(self,*args,**kwargs):
context = super().get_context_data(*args,**kwargs)
context['so'] = get_object_or_404(SaleOrder, pk=self.kwargs['pk'])
context['object_list'] = SaleOrderItem.objects.filter(so_number=self.kwargs['pk'])
return context
def post(self, request, *args, **kwargs):
selected_items = request.POST.getlist('selected_items')
print(selected_items) #just a test
context = self.get_context_data(*args,**kwargs)
return self.render_to_response(context) #Just a test
моя модель выглядит так
class SaleOrderItem(models.Model):
so_line_number = models.IntegerField(verbose_name='Line')
sale_order_item = models.ForeignKey(Items, on_delete=models.PROTECT,verbose_name='Item')
so_number = models.ForeignKey(SaleOrder, on_delete=models.CASCADE)
so_quantity = models.DecimalField(max_digits=14,decimal_places=2,default=0.00,verbose_name='Quantity')
sale_price = models.DecimalField(max_digits=14,decimal_places=2,verbose_name='Sale Price')
so_tax_rate = models.ForeignKey(TaxRate, on_delete=models.PROTECT)
so_item_tax_amount = models.DecimalField(max_digits=14,decimal_places=2,verbose_name='Tax Amount')
total_price = models.DecimalField(max_digits=14,decimal_places=2,default=0.00)
variation_number = models.IntegerField(default=0)
variation_quantity = models.DecimalField(max_digits=14,decimal_places=2,default=0,verbose_name='Variation Quantity')
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.so_line_number)
, а часть HTML выглядит так
<table class="table table-striped table-sm">
<thead>
<tr>
<th>Select</th>
<th>Line Number</th>
<th>Description</th>
<th>UoM</th>
<th>Quantity</th>
<th>Price</th>
</tr>
</thead>
{% if object_list %}
<tbody>
{% for item in object_list %}
<tr>
<td>
<input type="checkbox" name="selected_items" value={{item.id}}>
</td>
<td>{{item}}</td>
<td>{{item.sale_order_item.item_description}}</td>
<td>{{item.sale_order_item.item_uom}}</td>
<td>{{item.so_quantity}}</td>
<td>{{item.total_price}}</td>
</tr>
{% endfor %}
</tbody>
{% endif %}
</table>
Я хотел бы знать, есть ли правильный метод чтобы добиться этого, например, с помощью FormView или любого другого представления.
Я пробовал сделать это с помощью FormView, но мне трудно динамически назначать {{item.id}} в представлении функции, а также в шаблоне html. Кроме того, как сгенерировать экземпляры формы в соответствии с требуемым количеством элементов, возвращаемых в запросе. В любом случае спасибо!