@RuDiG

Вопросик вселенского масштаба. Как добавить данные в БД Django?

Делаю книжный веб-магазин. В магазине есть лента, где пользователь выбирает книгу, нажимает на нее, знакомится с описанием и ценой и если хочет купить переходит на форму оплаты(на скрине). Пробовал делать через формы, но это не то, что хотелось бы. Вопрос, как сделать, что бы при нажатии на кнопку Добавить считывались название, пользователь и цена товара и вносилось в БД.

class Basket(models.Model):
    name = models.CharField('Имя юзера', max_length=150, db_index=True)
    mail_user = models.CharField('Почта', max_length=100)
    name_book = models.ForeignKey(Shop, on_delete=models.CASCADE, default='', blank=True, null=True)


HTML

<tr>
     <td class="esd-block-text" align="left">
     {% csrf_token %}
     <p>Название книги: {{book.name}} </p>
     <p>Пользователь: {{user.username}} </p>
     <p>Стоимость:  {{book.price}} Р </p>
     <button class="btn btn-success" type="submit">Добавить</button>
 </td>


Вьюшка вызова страниц

class BooksByeView(DetailView):
    model = Shop
    template_name = 'shop/bye.html'
    context_object_name = 'book'


634bd5fdefd1b575938090.png
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Сделай так, чтобы по нажатию на Добавить генерировался фоновый запрос через JS, передающий id книги.
На бэкэнде сделай роут для этого запроса, и в нём уже выполняешь нужные действия.
Ответ написан
@hkkf0
Привет. Насколько я понял ты хочешь сделать корзину?

В моделе Basket нужно добавить ForeignKey к юзеру или сессии. Иначе корзина никак не будет привязана к юзеру.

Добавляешь в urls новый роут, допустим add-to-cart/. Пишешь к ней вьюшку, в которой в корзину юзера будет добавлена книга по ее id из query string. В html тебе нужно генерировать вместо кнопки примерно такую ссылку:
add-to-cart/?book_id={{ book.id }}

Раз не знаешь JS, в html тебе нужно ставить не button, а ссылку. Так только будет одно но - при добавлении в корзину страница будет обновляться. Если хочешь избежать этого - используй JS, в частности AJAX запросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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