Django-订单电子商务中的数据库设计

时间:2019-10-20 20:56:51

标签: python django database django-models

我有一个方案对此最合适。

我有一个Articles表(例如比萨饼,饮料等)

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)

第二张表是文章选项(例如打顶(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)

和三阶表

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 个答案:

答案 0 :(得分:1)

您的订单表应进一步细分,以容纳多个商品和商品选项。您的商品选项应与添加到订单中的商品相关,而不应与订单本身相关。因此,我认为您的订单应如下所示,

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)

希望这会有所帮助!

相关问题