これが別の場所で回答されている場合は、申し訳ありませんが、仕事の2日後でも葉巻はありません...
私はプレーヤーモデルを持っています:
class Player(models.Model):
name = models.CharField(max_length=60)
discord_id = models.CharField(max_length=60, null=True)
known_npcs = models.ManyToManyField(NPC)
プレイヤーは多くの NPC を知ることができ、どの NPC も多くのプレイヤーが知ることができます。
NPCは特別なものではありません:
class NPC(models.Model):
image = models.ImageField()
name = models.CharField(max_length=50)
description = models.TextField()
パズルの最後の部分は事実です。事実は NPC に関連付けられた情報の一部ですが、人は NPC を知ることができますが、必ずしも NPC に関連するすべての事実をプレイヤーが知っているとは限りません。したがって、事実は次のようになります。 :
class Fact(models.Model):
fact = models.TextField()
known_by = models.ManyToManyField(Player)
npc = models.ForeignKey(NPC, on_delete=models.DO_NOTHING, null=True)
今グラフェンで、これを与える Player と allPlayers クエリを作成したいと思います:
{
allPlayers {
name
knownNPCs {
image
name
description
factsKnown {
fact
}
}
}
}
ここで、factKnown は、Fact オブジェクトからの ManyToMany 関係に基づくもののみです。
これまでに作成したものはデータを返しますが、プレーヤーの親に基づいてファクトをフィルタリングしません。npc に関連するすべてのファクトを表示するだけです :(
ファクト スキーマ
class FactType(DjangoObjectType):
class Meta:
model = Fact
filter_fields = ["id"]
class Query(object):
fact = Node.Field(FactType)
all_Facts = graphene.List(FactType)
def resolve_all_Facts(self, info, **kwargs):
return Fact.objects.all()
NPCスキーマ
class NPCType(DjangoObjectType):
class Meta:
model = NPCS
class Query(object):
all_NPCs = graphene.Field(NPCType)
facts = graphene.List(FactType)
def resolve_all_NPCs(self, info, **kwargs):
return NPCS.objects.all()
PlayerSchema:
class PlayerType(DjangoObjectType):
class Meta:
model = Player
interfaces = (Node,)
filter_fields = ["id"]
class Query(object):
player = Node.Field(PlayerType)
all_players = graphene.List(PlayerType)
def resolve_all_players(self, info, **kwargs):
return Player.objects.all()
def resolve_player(self, info, **kwargs):
player = Player.objects.filter(id=info.id)