@matue89

CRUD фоном через Django REST API?

Добрый день.

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

Разрабатываю приложение с БД продуктов, завел модель 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?
  • Вопрос задан
  • 568 просмотров
Пригласить эксперта
Ответы на вопрос 1
darqsat
@darqsat
PM
Такое подойдет?

def ProductList(request):
    if request.method == 'GET':
        queryset = Product.objects.all()
        return Response({'object_list': queryset}, template_name='products/product_list.html')
    elif request.method == 'POST':
        form = request.POST
        # ТВОЙ КОД
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы