Как я могу добавить что-то в базу данных с помощью кнопки отправки в Django? - PullRequest
0 голосов
/ 02 мая 2020

Я создаю веб-приложение со списком продуктов в django, и у меня есть страница с вашим списком продуктов, и у меня есть страница со всеми продуктами, которые вы можете добавить в свой список.

у каждого товара есть кнопка «добавить в список». Предполагается, что при нажатии на эту кнопку этот продукт автоматически добавляется в список продуктов. Кто-нибудь знает, как это сделать? заранее спасибо.

Страница списка бакалейных товаров

Страница всех продуктов

модели .py

from django.db import models

# Create your models here.

class Brand(models.Model):
    name = models.CharField(max_length=200, null=True)

    def __str__(self):
        return self.name

class AllProducts(models.Model):
    name = models.CharField(max_length=200, null=True)

    def __str__(self):
        return self.name



class ShoppingList(models.Model):
    product = models.ForeignKey(AllProducts, null=True, on_delete= models.SET_NULL, blank=True)
    brand = models.ForeignKey(Brand, null=True, on_delete= models.SET_NULL, blank=True)
    quantity = models.CharField(max_length=200, null=True, blank=True)
    info = models.TextField(max_length=500, null=True, blank=True)


    def __str__(self):
        return self.product

Бренд класса - это класс со всеми брендами продуктов. Класс All_Products - это класс со всеми продуктами, которые вы можете добавить в свой список покупок. А класс ShoppingList - это класс со всеми продуктами в списке продуктов.

Views.py

def home(request):
    products = ShoppingList.objects.all()

    context = {
        'products':products,
    }

    return render(request, 'groceries_list/home.html', context )

def all_products(request):
    all_products = AllProducts.objects.all()
    context = {
        'products':all_products,

    }
    return render(request, 'groceries_list/all_products.html', context)

Функция home - это функция, которая управляет продуктами Страница списка и функция all_products - это функция, которая обрабатывает страницу со всем продуктом, который вы можете добавить в свой список.

шаблон списка покупок

{% extends "groceries_list/base.html" %}
{% block content %}
<div class="card">
  <div class="card-body">
    <div class="card m-1 text-white">
      <a href="{% url 'create_grocery' %}" class="btn btn-success btn-md btn-block ">Add Grocery</a>
    </div>
    {% for product in products %}
    <div class="item-row">
        <div class="card m-1 text-white" style="background-color: #9BD6E0;">
            <div class="card-body">
            <a class="btn btn-sm btn-info" href="{% url 'update_gorcery' product.id %}">Update</a>
            <a class="btn btn-sm btn-danger" href="{% url 'delete_gorcery' product.id %}">Delete</a>
            <span class="text-dark"><strong>{{product.product}}</strong>  {{product.quantity}} </span>
            </div>
        </div>
    </div>
    {% endfor %}
  </div>

</div>
{% endblock  %} 

все продукты шаблона

% extends "groceries_list/base.html" %}
{% block content %}
<div class="card">
  <div class="card-body">
    <div class="card m-1 text-white">
      <a href="{% url 'create_product' %}" class="btn btn-success btn-md btn-block ">Add Product</a>

    </div>


    {% for product in products %}
    <div class="item-row">
        <div class="card m-1 text-white" style="background-color: #9BD6E0;">
            <div class="card-body">
            <button type="submit" class="btn btn-success btn-sm ">Add To List</button>

           <span class="text-dark ml-3 text-center"><strong>{{product.name}}</strong>
             <a class="btn btn-sm btn-danger float-right" href="{% url 'delete_product' product.id %}">Delete</a>
            </div>
        </div>
    </div>
    {% endfor %}
  </div>

</div>
{% endblock  %} 

1 Ответ

0 голосов
/ 02 мая 2020

На сайте может быть много users, использующих его одновременно, поэтому вы должны найти способ идентифицировать конкретного user, который добавляет товар в список покупок. Самый простой способ сделать это - создать систему аутентификации (вы можете использовать как есть или расширить модель User) из django.auth.models. Смотря на ваши представления, как они есть, home() и all_products() представление отображает тот же контекст, который определенно не может быть тем, что находится в корзине (для домашнего просмотра).

Способ справиться с этим состоял бы в том, чтобы сделать вашу модель ShoppingList таким образом, чтобы она включает в себя поле для customer. Заказчиком будет пользователь, создающий request. На странице all_products.html вы можете создать форму со скрытым полем, предварительно заполнив ее product.id и кнопкой «добавить в список» в качестве кнопки отправки для этой формы. Когда пользователь нажимает «добавить в список», форма публикуется по URL-адресу, который вызывает ответственное представление. В этом представлении вы создаете 'ShoppingList object' (экземпляр модели ShoppingList, которую вы создали в моделях) со значениями product.id, которые были отправлены формой и клиентом как request.user (пользователь сделать запрос). Несколько случайных советов: в вашем ShoppingList model вы определяете количество как CharField, но количество лучше всего определить как IntegerField. Кроме того, нет необходимости использовать аргументы blank=True и null=True. Лично мне нравится использовать blank=True только по соображениям безопасности, о которых я не буду здесь говорить. Я также рекомендую вам пересмотреть системы имен для ваших моделей и представлений.

В заключение:

  • Добавить полевого клиента к модели ShoppingList.
  • Сделать поле product CharField.
  • Создать форму со скрытым полем, которое отправляет обратно product.id, когда пользователь нажимает «добавить в список».
  • Обрабатывать запрос на публикацию сделав объект ShoppingList.
  • Рассмотрите возможность сделать количество IntegerField.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...