항목이 고유하지 않은 경우 Daniel Roseman이 제안한대로 PlayerItem 모델을 사용하여 through model으로 정의 할 수 있습니다. 두 번 당신이 unique_together
을 사용할 수있는 동일한 항목을 저장하지 않도록하려면
class Item(models.Model):
name = models.CharField(max_length = 200, blank = False)
class Player(models.Model):
items = models.ManyToManyField(Item, through='PlayerItem')
class PlayerItem(models.Model):
player = models.ForeignKey(Player)
item = models.ForeignKey(Item)
quantity = models.IntegerField(default=1)
class Meta:
unique_together = ('player', 'item')
그러나 항목이 약간 다를 것 또는 당신은 취득일을 할 필요가있는 경우 예를 들어, 당신은 다른 설정이 필요합니다
class Item(models.Model):
name = models.CharField(max_length = 200, blank = False)
class Player(models.Model):
items = models.ManyToManyField(Item, through='PlayerItem')
class PlayerItem(models.Model):
player = models.ForeignKey(Player)
item = models.ForeignKey(Item)
acquired = models.DateTimeField(default=datetime.datetime.now)
이를 각 아이템에 대해 (플레이어, 아이템) 튜플의 중복을 저장할 시간입니다. 그런 다음 count()
을 통해 특정 항목의 번호를 가져올 수 있습니다.
PlayerItem
모델에 Item
도 아니고 Player
도 연락 할 수 없다는 점에 유의하고 싶습니다. 두 경우 모두 여분의 필드에 액세스하려면 PlayerItem
을 직접 쿼리해야합니다. (문서화 된대로)