0

我有一个应用程序,人们可以在其中将他们的东西添加到目录中。现在的问题是,通用目录/列表模型只允许您添加基本产品信息,例如:

Title: My awesome laptop
Category: fk:123 (resolved: u'Electronics > Computers > Laptops')
Seller: fk: 1653 (resolved: u'DudeNobodyKnows')
PriceValue: 100 (resolved: u'100.00,-')
PriceCurrency: fk:15 (resolved: u'€ (EUR)')
DateAdded: 2013-09-02 (resolved: u'2nd September 2013')
Description: u'I just hate it and want to sell it.\
               I can give you a 10% off if you buy\
               this thing by 4rd September 2013.

               = Specs =
               CPU: Intel Core i7 2770k
               RAM: 64GiB DDR3 Dual-Channel ECC FB-DIMM 1666 MHz
               HDD: Kingston HyperX SSDNow V300 120 GiB

               Contact: +12 123456789
                        em@il.com'

等等

我希望这= Specs =部分完全属于笔记本电脑专用型号。我希望这个目录是完全具体的。我希望查看者能够找到一些运行 Intel® 处理器的计算机,该处理器具有至少 2 个内核和至少 16 GiB 的 RAM 以及 10K HDD 或 SSD,并且屏幕尺寸不应大于 15 英寸等。我想要他能够将此信息输入到搜索表单中,我希望他能够找到这台笔记本电脑,因为它超出了他的要求(即使屏幕尺寸未知,但这只会将其移动到“要求未完全满足”列表中的部分)。

完成这项工作的最佳方法是什么?

我应该只为通用信息提供一个模型,然后在该模型中“插入”各个组件吗?就像有谁在出售它以及以什么价格(以及该信息)的报价,然后将单个项目添加为外键?在 Category 模型中包含此内容:id、title、parent(manytomany)、description 和 AllowedModels 也就是您可以放入该类别和它的孩子的东西(就像您不能将珠宝放入 Graphic Cards 类别一样)。然后为该应用程序中可能出售的每件东西制作一个模型,如笔记本电脑、汽车、螺栓、吉他、扬声器等,并制作另一批将扩展它们的子类别(如

Laptop: Thin Client
        Netbook
        ThoughBook
        Office Laptop
        General Purpose Laptop
        Multimedia Laptop
        Business Laptop
        Gaming Laptop
        Professional Laptop
        MacBook

等等

这是一个正确的方法吗?品牌也是如此(Apple 生产笔记本电脑、台式机、平板电脑、手机,但不生产钻头、锤子、汽车或马克杯)

在 PC 领域,进行大量预设(过去 10 年销售的所有 CPU 和 GPU 等)并将这些组件称为多对多键 - 您可以拥有一台具有 2 个 Xeon CPU 和 16 个 RAM DIMM 和坏蛋的计算机16 盘 SSD RAID 阵列,对吗?

这是将所有内容扩展和插入在一起的正确方法吗?还是将其保留在第一个示例中更好?

这是非常非常具体的方法吗?它会带来严重的性能影响吗?哦,我在 PostgreSQL 中做所有事情……</p>

非常感谢您的回答!

4

1 回答 1

1

您是否研究过模型继承?

如果没有,那么可能是您阅读它的时候了。https://docs.djangoproject.com/en/dev/topics/db/models/#model-inheritance

它们在实现级别的工作方式是,您定义一个包含所有基本细节的“基”类。

一个非常简化的例子可能是这样的

class Item(models.Model):
    name = models.CharField()
    price = models.CharField()
    location = models.CharField()
    catgegory = models.CharField()

    class Meta:
        abstract = True

class Computer(Item):
    CPU = models.CharField()
    RAM = models.CharField()
    HDD = models.CharField()

abstract = True行表明 Django 不应该为它创建一个数据库表。它是其他类扩展的通用基类。

因为 Computer 类继承自 Item 类,所以它可以访问其所有属性。您甚至可以将计算机类扩展为两个台式机和笔记本电脑类。

如果您还不了解继承,我强烈建议您阅读有关它的更多信息。维基百科总是一个很好的起点:)

http://en.wikipedia.org/wiki/Inheritance_(面向对象编程)

于 2013-09-02T09:04:26.650 回答