【发布时间】:2012-08-17 21:20:50
【问题描述】:
我有一个 Item 模型,尊重 Owner,每个 item 可以有多个 owner,每个 owner 可以有多个 item。如下:
class User(models.Model):
user = models.ForeignKey(DjangoUser)
class Item(models.Model):
owners = models.ManyToManyField(User, through='**ItemOwner**')
class ItemOwner(models.Model):
item = models.ForeignKey(Item)
owner = models.ForeignKey(User)
class Meta(models.Model.Meta):
db_table = 'items_owners'
我还有一个类 Price 和 PremiumPrice 来设置商品的价格:
class **Price**(models.Model):
price = models.DecimalField(max_digits=12)
class **PremiumPrice**(models.Model):
item = models.OneToOneField(Item)
price = models.ForeignKey(Price)
如您所见,每个物品只能有一个由 PremiumPrice 类设置的价格,每个物品都归该物品的所有者所有,任何所有者都可以更改价格,但价格是唯一的物品。此外,当有人购买该商品时,它由 PurchaseItem 类处理,如下所示:
class PurchaseItem(models.Model):
item = models.ForeignKey(Item)
user = models.ForeignKey(User)
class Meta:
db_table = 'purchase_item'
unique_together = ('item', 'user')
现在,我想将其转换为多供应商方案。每个项目可以由多个所有者拥有,每个所有者都可以为自己的项目设置自己的价格。 所以我认为我需要做的是将价格添加到项目模型并创建一个新类 ItemPrice (为每个项目添加价格):
class Item(models.Model):
owners = models.ManyToManyField(User, through='ItemOwner')
prices = models.ManyToManyField(Price, through='ItemPrice')
class ItemPrice(models.Model):
item = models.ForeignKey(Item)
price = models.ForeignKey(Price)
class Meta(models.Model.Meta):
db_table = 'items_prices'
然后将类 PremiumPrice: 项目从 OneToOneField 更改为 ForeignKey,还包括所有者:
class PremiumPrice(models.Model):
item = models.ForeignKey(Item)
price = models.ForeignKey(Price)
owner = models.ForeignKey(User)
为了记录每笔交易,PurchaseItem 类还需要包含所有者,unique_together 还需要新值:
class PurchaseItem(models.Model):
item = models.ForeignKey(Item)
user = models.ForeignKey(User)
owner = models.ForeignKey(User)
class Meta:
db_table = 'purchase_item'
unique_together = ('item', 'user', 'owner') #
但我仍然不确定我是否正确。因此,如果您对我可能遇到的错误/陷阱有任何 cmets/建议,请告诉我。我真的很感激。
非常感谢!
【问题讨论】:
标签: django django-models many-to-many