2

我想创建一个订单以购买这种结构中的多个东西:

Business Data 1
---Product A
---Product B
Business Data 2
---Product A

也就是说,我想销售产品 A、B,但在此之前,我需要在“业务数据”对象中添加额外的聚合数据。那是:

Business 1: Joe's Plumbing, located at ... ... ...
---Product A, standard ad appearing in category 3, with text "awesome plumbing"
---Product B, cooler ad appearing in category 9, with text "cheap plumbing"
Business 2: Joe's Burgers, located at ... ... ...
---Product A, standard ad appearing in category 4, with text "zzz"

或者,从模型级别来看,更像:

class Business(models.Model):
    name = models.CharField(max_length=255)
    address = models.MagicAddressField()

class Ad(models.Model):
    category = models.ForeignKey(Category)
    text = models.CharField(max_length=255)
    business = models.ForeignKey(Business)

现在,我很确定我想使用Satchmo ,而不是重新实现整个购物车后端。但是,我很难理解这种事情。

Satchmo 似乎有多个产品选项,但它们都是“扁平的”。也就是说,虽然我可以很容易地让 Satchmo 允许最终用户购买产品 A 和产品 B,但 db 显示与业务 1 没有任何联系,并且必须在产品 A 和 B 中重复诸如业务名称之类的内容。

我想我可以用我自己的视图/模板来解决这个问题,只要我能获得 satchmo 在订单期间销售的最终“产品实例”,以便拥有我自己创建的 Business 表的外键。换句话说,我想让 Ad 模型成为一个 satchmo定制产品模型——我认为......

但是,如果我只是将 Ad 更改为:

class Ad(Product):
    objects = ProductManager()

    category = models.ForeignKey(Category)
    text = models.CharField(max_length=255)
    business = models.ForeignKey(Business)

这不是错误的语义吗?这不是说“此产品类型与业务 x 相关联”,而不是“当您购买此产品时,该产品的实例将指向业务 x”?

我在这里很困惑:-/

4

1 回答 1

0

如果我理解正确,我会做这样的事情。

在业务和产品之间建立多对多关系:

class Business(models.Model):
    name = models.CharField(max_length=255)
    address = models.MagicAddressField()
    products = models.ManyToManyField(Product)

然后,在您的自定义表单和模板/视图上,您​​可以为每个企业添加一个包含每个企业的产品/广告的字段集。我现在看到的唯一复杂情况是,在填写表格并发送之后,您还需要自定义“结帐流程”来保存通过哪个企业购买的产品的信息......也许这可能是通过产品选项(?)完成,但无论如何这可能意味着大量的定制/使用信号;-) 但我认为这是正确的方向。

于 2012-03-09T10:48:15.337 回答