在 Django 中实现 'saved books' 购物车

Implementing 'saved books' cart in Django

我想实现一个购物车页面,我可以在其中保存我之前保存的所有书籍

models.py

class Book(models.Model):
LANGUAGES = (
    ('ukr', 'Ukrainian'),
    ('eng', 'English'),
    ('rus', 'Russian'),
)
image = models.ImageField(upload_to='images/', default='4.jpg')
title = models.CharField(max_length=128)
description = models.CharField(max_length=512)
language = models.CharField(choices=LANGUAGES, default='English', max_length=100)
# many books has one genre, if genre is deleted then delete related books
genre = models.ForeignKey('Genre', on_delete=CASCADE)
price = models.DecimalField(validators=[isBiggerThanZero], max_digits=6, decimal_places=2)
slug = AutoSlugField(populate_from='title', default='')

def __str__(self):
    return self.title

class Genre(models.Model):
    genre = models.CharField(max_length=32, default='')

    def __str__(self):
        return self.genre

我认为我需要添加一个新模型 购物车 带有一个字段

已保存 = models.ForeignKey(书籍)

但它应该是一个书籍列表,我知道如何实现它:(

P.S.1如果你想保存一本书,你应该注册,这样用户才有权限。跳过会话:)

P.S.2 如果有办法不用额外的模块就可以做到这一点,我将非常感谢你:)

由于您不想使用额外的模块,您可以使用 userbooks 作为外键创建一个模型 Cart

class Cart(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)
    # Quantity of a book that is saved in the cart. Default will be 1
    quantity = models.IntegerField(default=1)

每当用户访问他的购物车时,只需从该模型中获取数据并将其显示给用户。

购物车 Table 看起来像这样(来自 Cart 模型的上述定义):

+------+------+----------+
| User | Book | Quantity |
+------+------+----------+
|  1   |  51  |    1     |
|  2   |  95  |    1     |
|  1   |  65  |    1     |
+------+------+----------+

您可以看到 id=1 的用户在他的购物车中存储了两本书(ids = 5165),而用户 (id=2) 中只有一本书他的购物车(书 id=95)。

在上述字段中添加您可能认为必要的任何字段 - 例如价格等,