【问题标题】:Django - Database design in orders ecommerceDjango - 订单电子商务中的数据库设计
【发布时间】:2019-10-20 20:56:51
【问题描述】:

我有一个场景,什么是最好的设计。

我有一个 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 种酱汁,用户可以选择多种浇头和多种酱汁)。那么如何以最佳方式制作订单表

【问题讨论】:

    标签: python django database django-models


    【解决方案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)
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回复。我还必须存储文章选项的数量。我怎么说'Article1' -> 'Article option2' -> 数量是10个
    • 然后您需要拆分您的订单选项并在其上添加额外数量字段。检查我的更新答案。
    • 得到你的逻辑谢谢 (Y) 。最后一件小事,如何在 Django REST 框架中以 json 的顺序显示所有这些数据。我知道该怎么做。但现在我有 3 张桌子。如何按顺序显示数据
    • DRF 中的序列化程序应该会为您解决这个问题。不幸的是,我不是 DRF 专家,但我知道它支持嵌套模型,如下所示 django-rest-framework.org/api-guide/relations/…
    • 很高兴我能帮上忙。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2018-09-03
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2014-07-29
    相关资源
    最近更新 更多