AlexNest
@AlexNest
Работаю с Python/Django

Альтернативные варианты реализации корзины в DRF?

В качестве практити создал корзину, рабоающую через сессии.
Сейчас решил заняться изучением DRF, в котором для взаимодействия с пользователем в большинстве случаев используется Токен/JWT. Отсюда вопрос - какие еще варианты реализации корзины существуют?
В гугле нашел вариант с корзиной непосредственно в БД.
  • Вопрос задан
  • 755 просмотров
Решения вопроса 1
EtherDaler
@EtherDaler
Еще зеленый
Создаете модель корзины, связываете ее с моделью пользователя. Потом создаете модель товары корзины и связываете ее с моделью корзины. Важно указать в ForeignKey полях аргумент related_name, чтобы можно было обращаться из родительской модели к дочерней.
class Basket(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='basket')

class BasketProducts(models.Model):
    basket= models.ForeignKey(Basket, on_delete=models.CASCADE, related_name='basket_products')
    products = models.ManyToManyField(Products, on_delete=models.CASCADE, related_name="basket_products")

class Products(models.Model):
    name = models.CharField(max_length=255)
   '''''

Потом сериализируете модели
class ProductsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Products
        fields = ("__all__")


class BsketProductsSerializer(serializers.HyperlinkedModelSerializer):
    products = ProductsSerializer(many=True)
    class Meta:
        model = BasketProducts
        fields = ('basket','products')

class BasketSerializer(serializers.HyperlinkedModelSerializer):
    basket_products = BsketProductsSerializer(many=True)
    class Meta:
        model = Basket
        fields = ('user' , 'basket_products ')

class UserSerializer(serializers.HyperlinkedModelSerializer):
    basket = BasketSerializer(many=True)
    class Meta:
        model = User
        fields = ('id', 'phone','email' ,'basket')


Далее во вьюхе в вашей функции API указываете permission_class как isAuthenticated, потом получаете корзину пользователя командой request.user.basket . В запросе в хедере указываете Authorization и токен.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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