私は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によって設定された価格を 1 つだけ持つことができ、各アイテムはそのアイテムの所有者によって所有されていました。所有者は価格を変更できますが、価格はそのアイテムに固有です。また、誰かがそのアイテムを購入すると、以下のようにPurchaseItemクラスによって処理されました。
class PurchaseItem(models.Model):
item = models.ForeignKey(Item)
user = models.ForeignKey(User)
class Meta:
db_table = 'purchase_item'
unique_together = ('item', 'user')
今、私はそれをマルチベンダー方式に変換したいと考えています。各アイテムは複数の所有者が所有でき、各所有者は自分のアイテムに独自の価格を設定できます。だから私がする必要があると思うのは、 Item モデルに価格を追加し、新しいクラス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') #
しかし、私が正しいかどうかはまだ確信が持てません。したがって、エラー/落とし穴についてコメント/提案がある場合は、お知らせください。本当に感謝しています。
どうもありがとうございました!