Django - Разработка базы данных в заказах электронной коммерции - PullRequest
0 голосов
/ 20 октября 2019

У меня есть сценарий, который будет лучшим дизайном для этого.

У меня есть таблица статей (например, пицца, напитки и т. Д.)

class Articles(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE , blank=True, null=True)
    articlename = models.CharField(max_length=50, null=False, blank=False)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    category = models.ForeignKey(Categories, on_delete=models.CASCADE)
    ingredient = models.ManyToManyField(Ingredient)     #done
    articleoptionnames = models.ForeignKey(ArticlesOptionsName , on_delete=models.CASCADE)

2-я таблица - это варианты статьи (например, начинка (1 раз, 2 или 3 раза), дополнительный соус и т. Д.)

class ArticlesOptions(models.Model):
    articleoptionrestaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE , blank=True, null=True)
    optionname = models.ForeignKey(ArticlesOptionsName, on_delete=models.CASCADE, related_name="optionnames")
    min = models.IntegerField()
    max = models.IntegerField()
    choice_price = models.DecimalField(max_digits=10, decimal_places=2)
    choice = models.CharField(max_length=255)
    def __str__(self):
        return str(self.optionname)

И таблица 3-го порядка

class orders(models.Model):
      restaurant=models.ForeignKey(Restaurant, on_delete=models.CASCADE , blank=True, null=True)
      articles=models.ForeignKey(Articles, on_delete=models.CASCADE , blank=True, null=True)
      articleoptions=models.ManyToManyField(ArticlesOptions)
      totalamount=models.DecimalField(max_digits=10, decimal_places=2)

      def __str__(self):
          return str(self.articles)

Клиент сможет покупать много изделий одновременно, и тогда у каждого товара есть несколько вариантов товара (например, 4 вида долива и 4 типа соуса. Пользователь может выбрать много типов долива и много типов соуса). ТАК как сделать стол заказов наилучшим образом?

1 Ответ

1 голос
/ 21 октября 2019

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

class Orders(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE, blank=True, null=True)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2)

И добавить модель артикула заказа, в которой есть статьи, специфичные для этого заказа, каждая со своей опцией, а у каждой опции есть количество.

class OrderArticle(models.Model):
    order = models.ForeignKey(Orders, on_delete=models.CASCADE)
    article = models.ForeignKey(Articles, on_delete=models.CASCADE)


class OrderArticleOption(models.Model):
    article_option = models.ForeignKey(ArticlesOptions, on_delete=models.CASCADE)
    order_article = models.ForeignKey(OrderArticle, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)

Надеюсь, это поможет!

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