我有一个Item模型及其尊敬的Owner,每个项目可以有多个所有者,每个所有者可以有多个项目。如下所示:
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类设置 1 个价格,每件商品归该商品的所有者所有,任何所有者都可以更改价格,但该商品的价格是唯一的。此外,当有人购买该项目时,它由类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 : item 从 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') #
但我仍然不确定我是否正确。因此,如果您对我可能遇到的错误/陷阱有任何意见/建议,请告诉我。我真的很感激。
非常感谢!