Я хочу создать изменяющийся «массив» опций цвета и размера для каждого элемента в панели администратора - PullRequest
0 голосов
/ 27 июня 2019

Заголовок и код.Я работаю над сайтом электронной коммерции, где у меня будет несколько вариантов для каждого элемента (цвет / размер).В коде вы можете увидеть цену, цену (1-3), идея состоит в том, чтобы создать кнопку или опцию для администратора, чтобы добавить дополнительные размеры и, следовательно, цены без жесткого кодирования sizename (1-4), и то же самое касается colorName (1-4).Я надеюсь, что вы понимаете, к чему я стремлюсь, я только вчера начал изучать python и все эти вещи с начальной загрузкой и django.Кстати, если вам известен более простой способ справиться со всем этим, пожалуйста, дайте мне знать, я заблудился о том, как сделать корзину для покупок.

Я только начал эту

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    stock = models.IntegerField()
    image_url = models.CharField(max_length=2083)
    category = models.CharField(choices=MY_CHOICES, max_length=25, default='Default')
    multSizes = models.BooleanField(default=False)

    numberSizes = models.IntegerField(default=1)
    price1 = models.DecimalField(decimal_places=2, max_digits=20, default=0)
    price2 = models.DecimalField(decimal_places=2, max_digits=20, default=0)
    price3 = models.DecimalField(decimal_places=2, max_digits=20, default=0)
    sizename1 = models.CharField(max_length=255, default='N/A')
    sizename2 = models.CharField(max_length=255, default='N/A')
    sizename3 = models.CharField(max_length=255, default='N/A')
    sizename4 = models.CharField(max_length=255, default='N/A')
    numberColors = models.IntegerField(default=1)
    colorName = models.CharField(max_length=255, default='N/A')
    colorName1 = models.CharField(max_length=255, default='N/A')
    colorName2 = models.CharField(max_length=255, default='N/A')
    colorName3 = models.CharField(max_length=255, default='N/A')
    colorName4 = models.CharField(max_length=255, default='N/A')

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

1 Ответ

0 голосов
/ 27 июня 2019

Если у вас есть только одно поле «цвет» и «размер» для модели Product, вы можете создать несколько экземпляров модели с разными свойствами.

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    stock = models.IntegerField()
    image_url = models.CharField(max_length=2083)
    category = models.CharField(choices=MY_CHOICES, max_length=25, default='Default')
    sizename = models.CharField(max_length=255, default='N/A')
    colorName = models.CharField(max_length=255, default='N/A')
>>> p1 = Product(name="shirt", price=10, sizename="M", colorname="red")
>>> p2 = Product(name="pants", price=20, sizename="M", colorname="yellow")

Однако я думаю, что проблема, с которой вы столкнулись, заключается в том, что для продукта с одним набором некоторых свойств - name, price, stock, image_url и category - Есть несколько размеров и цветов. Это правильно?

Если это так, вы все равно можете создать несколько экземпляров с общими свойствами:

>>> p1 = Product(name="shirt", price=10, sizename="M", colorname="red")
>>> p2 = Product(name="shirt", price=10, sizename="L", colorname="yellow")

Однако при проектировании базы данных это не считается «нормальной формой». См .: Вторая нормальная форма (Википедия).

Лучшим дизайном может быть включение этих атрибутов в отдельную таблицу, т. Е. Вторую модель Django, которая ссылается на первую модель с внешним ключом. Примерно так:

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    stock = models.IntegerField()
    image_url = models.CharField(max_length=2083)
    category = models.CharField(choices=MY_CHOICES, max_length=25, default='Default')


class ProductVariant(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    sizename = models.CharField(max_length=255, default='N/A')
    colorName = models.CharField(max_length=255, default='N/A')

Для получения дополнительной информации см. Документы Django по отношениям "многие к одному" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...