Базовый запрос в django graphql не работает с реляционными моделями
Это мой models.py
class Player(models.Model):
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
username = models.CharField(max_length=25)
class Challange(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
status = models.CharField(max_length=25, choices=StatusChoice.choices)
from_player = models.ForeignKey(Player, related_name='my_challenges', on_delete=models.SET(get_sentinel_user))
to_player = models.ForeignKey(Player, related_name='challanges', on_delete=models.SET(get_sentinel_user))
schema.py
class ChallangeType(DjangoObjectType):
class Meta:
model = Challange
fields = ['id', 'status', 'from_player', 'to_player']
class Query(graphene.ObjectType):
challanges = graphene.List(ChallangeType)
def resolve_challanges(root, info):
user = info.context.user
return Challange.objects.filter(to_player=user.player, status=StatusChoice.WAITING)
schema = graphene.Schema(query=Query)
Я хочу получить вызовы, касающиеся зарегистрированного пользователя, все работает, когда я требую поля 'id' и 'status', но когда я пытаюсь добавить "from_player" или "to_player", я получаю ошибку
"Cannot query field 'from_player' on type 'ChallangeType'". Также, эти поля (from_player, to_player) не показывают нам подсказки при написании.
Я решил эту проблему, добавив дополнительный DjangoObjectType к ChallangeType
class PlayerType(DjangoObjectType):
class Meta:
model = Player
fields = ["username", 'id']
class ChallangeType(DjangoObjectType):
class Meta:
model = Challange
fields = "__all__"
player = graphene.Field(PlayerType)