Передача данных через Django REST API

161
21 сентября 2018, 19:20

Прошу помощи.

Разрабатываю приложение с БД продуктов, завел модель 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?

READ ALSO
Как отличить события клика по элементу от его перетаскивания?

Как отличить события клика по элементу от его перетаскивания?

Имеется <div class="needsToMove"> на страницеЧерез js добавили метод

172
Как изменить отдельную ячейку в таблице на странице (HTML)?

Как изменить отдельную ячейку в таблице на странице (HTML)?

Нужно сделать чтобы пользователь на сайте мог вводить данные в БДСоздал вот такую таблицу: С библиотекой jQuery сделал ввод данных в таблицу,...

193
Как перенести iframe в другой элемент?

Как перенести iframe в другой элемент?

На странице с помощью скрипта (виджет) выводится iframe <iframe id="form_iframe" и тд

152
JavaScript - jQuery.load()

JavaScript - jQuery.load()

Моя задача - загрузить содержимое селектора с другой страницыЕсть метод load() в фреймворке jQuery

133