简体   繁体   中英

Basic query in django graphql doesn't work with relational models

This is my 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)

I want to get challenges concerns logged user, everything work when I demand 'id' and 'status' fields, but when I try add "from_player" or "to_player" I recive error

"Cannot query field 'from_player' on type 'ChallangeType' Also, this fields(from_player, to_player) doesn't show us hints while writing.

在此处输入图像描述

I solved it by adding additional DjangoObjectType to ChallangeType

class PlayerType(DjangoObjectType):
    class Meta:
        model = Player
        fields = ["username", 'id']

class ChallangeType(DjangoObjectType):
    class Meta:
        model = Challange
        fields = "__all__"

    player = graphene.Field(PlayerType)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM