【问题标题】:How can I organize a database with products and users?如何组织包含产品和用户的数据库?
【发布时间】:2020-03-16 15:13:02
【问题描述】:

我目前正在尝试为包含用户和产品的在线商店系统组织一个 django 数据库模型

我的代码:

class UserData(models.Model):
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=500)
    bought_products = models.ForeignKey(MarketProducts, on_delete=models.CASCADE)

class VendorData(models.Model):
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=500)
    sold_products = models.ForeignKey(MarketProducts, on_delete=models.CASCADE)

class MarketProducts(models.Model):
    category = models.CharField(max_length=100)
    vendor = models.ForeignKey(VendorData, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    description = models.CharField(max_length=1000)
    price = models.IntegerField()
    pub_date = models.DateTimeField('Date published')
    image = models.ImageField(upload_to=b'shop/media/images/')
    likes = models.IntegerField()
    dislikes = models.IntegerField()

如何组织一个良好的工作系统,以便用户购买的所有产品都保存在 bought_products 列中,而供应商出售的所有产品都可以保存在 sold_products 列中> 栏目。我必须为此使用 ForeignKey 还是有更适合这种情况的东西?另外,如果数据库模型的现有结构有什么不明智的(例如当前的 image 字段列只保存链接而不保存图像本身,这有点奇怪......),请感受免费纠正我:)。

提前非常感谢:D

【问题讨论】:

    标签: python django django-models database-design


    【解决方案1】:

    在这种情况下,我建议创建ManyToManyFieldbought_productssold_products 实例,因为同一个产品可以被多个用户购买并由多个供应商销售

    【讨论】:

    • 感谢您的快速回复!您能否给我一个代码示例,说明如何在我的情况下正确实现多对多关系?
    • 嗯,我觉得最好看看official documentation
    【解决方案2】:

    首先,我将首先阅读以下有关 django auth 自定义的文档。好像对你有一点帮助。

    https://docs.djangoproject.com/en/2.2/topics/auth/customizing/

    此外,我认为您需要更好地评估您的数据建模,以使每个模型更加明确/明确定义。请参见下面的示例:

    class Products(models.Model):
        vendor = models.ForeignKey(VendorData, on_delete=models.CASCADE)
        name = models.CharField(max_length=200)
        description = models.CharField(max_length=1000)
        price = models.IntegerField()
        pub_date = models.DateTimeField('Date published')
        image = models.ImageField(upload_to=b'shop/media/images/')
        likes = models.IntegerField()
        dislikes = models.IntegerField()
    
    
    class Category(models.Model):
        name = models.CharField(max_length=100)
        description = models.CharField(max_length=100)
        active = models.BooleanField(default=True)
    
    
    class ProductCategory(models.Model):
        product = models.ForeignKey(Products, on_delete=models.CASCADE)
        category = models.ForeignKey(Category, on_delete=models.CASCADE)
        creation_date = models.DateTimeField(auto_add_now=True)
    

    从那里我将构建一个单独的模型来存储客户购买的物品。由于您已经有一个将供应商存储到产品数据的模型,因此您不需要任何额外的东西来确定特定供应商的销售额。

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      相关资源
      最近更新 更多