Добрый день.
Прошу помощи.
Разрабатываю приложение с БД продуктов, завел модель Product в models.py:
class CommonModel(models.Model):
created = models.DateTimeField(auto_now_add=True, auto_now=False)
updated = models.DateTimeField(auto_now_add=False, auto_now=True)
class Meta:
abstract = True
class Product(CommonModel):
product_name = models.CharField(max_length=100)
measure = models.ForeignKey(Measure, on_delete=models.CASCADE, default='1')
barcode = models.CharField(max_length=20, default='')
def __str__(self):
return '%s' % self.product_name
class Meta:
verbose_name = 'Продукт'
verbose_name_plural = 'Продукты'
ordering = ('product_name', 'id') # сортировка объектов по имени
создал сериализатор в serializers.py:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ('id', 'product_name', 'measure', 'barcode')
через TemplateHTMLRenderer генерю страницу (views.py):
@api_view(('GET','POST'))
@renderer_classes((TemplateHTMLRenderer,))
def ProductList(request):
queryset = Product.objects.all()
return Response({'object_list': queryset}, template_name='products/product_list.html')
urls.py:
urlpatterns = [
path('products/', ProductList),
]
шаблон products/product_list.html:
{% for o in object_list %}
<tr>
<th scope="row">{{ o.id }}</th>
<td>{{ o.product_name }}</td>
<td>{{ o.measure }}</td>
<td>{{ o.barcode }}</td>
<td>{{ o.created }}</td>
<td>{{ o.updated }}</td>
</tr>
{% endfor %}
Теперь я хочу в форме на сгенерившейся странице добавить функционал добавления продукта фоновым POST запросом (без перезагрузки страницы, через API).
<form method="post">
<td><input type="text" class="form-control"></td>
<td> <input type="text" class="form-control"></td>
<td> <input type="text" class="form-control"></td>
<td><button class="btn btn-success" tabindex="-1" role="button" aria-disabled="true" id="create">Добавить</button></td>
<td></td>
</form>
Вопрос - как это можно реализовать с помощью фоновых запросов ajax/jquery? А именно: что добавить во views.py в функцию ProductList чтобы она отлавливала POST запрос и добавляла полученные с формы данные в базу через сериализатор/модель?
И правильно ли использовать рендер TemplateHTMLRenderer от django rest, в том смысле, чем это лучше использования классического рендера Django?