Django Cart - несколько вариантов конфигурации для продукта - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу создать веб-приложение Django, где пользователи могут добавлять товары в корзину.

Без моделей Colour и Size это пока работает.

Моя проблема в том, что я не могу понять, как правильно реализовать параметры конфигурации (например) Colour и Size.

Я добавил оба «Варианта» с отношением «многие к одному». Теперь я могу добавить несколько цветов и размеров для Продукта, но не знаю, как сохранить выбранный «Вариант» в CartEntry

Вот что я получил до сих пор:

from django.db import models
from django.contrib.auth.models import User

class Product(models.Model):
    name = models.CharField(max_length=256)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    def __str__(self):
        return str(self.name)


class Colour(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="rel_colour")
    option = models.CharField(max_length=24)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    def __str__(self):
        return str(self.colour)

class Size(models.Model):
    product =models.ForeignKey(Product, on_delete=models.CASCADE, related_name="rel_size")
    option = models.CharField(max_length=24)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    def __str__(self):
        return str(self.size)



class Cart(models.Model):
    user        = models.ForeignKey(User, null=True, blank=True, on_delete=models.CASCADE)
    products    = models.ManyToManyField(Product, blank=True)
    updated     = models.DateTimeField(auto_now=True)
    timestamp   = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.id) + ' - ' + str(self.user)


class CartEntry(models.Model):
    product = models.ForeignKey(Product, null=True, on_delete=models.CASCADE)
    cart = models.ForeignKey(Cart, null=True, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField()

    def __str__(self):
        return str(self.quantity) + ', ' + str(self.product.name)

Может быть, я не могу связать пользователя с CartEntry здесь?

1 Ответ

0 голосов
/ 10 апреля 2019

почему бы не сделать так:

    from django.db import models
    from django.contrib.auth.models import User

    class Product(models.Model):
        name = models.CharField(max_length=256)
        colour = models.ForeignKey(Colour, on_delete=models.CASCADE)
        size = models.ForeignKey(Size, on_delete=models.CASCADE)
        price = models.DecimalField(max_digits=6, decimal_places=2)
        def __str__(self):
            return str(self.name)

    class Colour(models.Model):
        name = models.CharField(max_length=24)
        def __str__(self):
            return str(self.name)

    class Size(models.Model):
        name = models.CharField(max_length=24)
        def __str__(self):
            return str(self.name)

поэтому каждый продукт имеет разный цвет и размер. или если вы хотите сделать продукт «родителем», вы можете добавить еще 1 модель, например, скажем, VariantProduct

    class Product(models.Model):
        name = models.CharField(max_length=256)
        def __str__(self):
            return str(self.name)

    class VariantProduct(models.Model):
        product = models.ForeignKey(Product, on_delete=models.CASCADE)
        name = models.CharField(max_length=256)
        colour = models.ForeignKey(Colour, on_delete=models.CASCADE)
        size = models.ForeignKey(Size, on_delete=models.CASCADE)
        price = models.DecimalField(max_digits=6, decimal_places=2)
        def __str__(self):
            return str(self.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...