1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
from typing import Optional
import strawberry
from django.db import models
from strawberry import auto
import strawberry_django
class MemberModel(models.Model):
name = models.CharField(max_length=50)
class ProjectModel(models.Model):
name = models.CharField(max_length=50)
members = models.ManyToManyField(MemberModel, through="MembershipModel")
class MembershipModel(models.Model):
project = models.ForeignKey(ProjectModel, on_delete=models.CASCADE)
member = models.ForeignKey(MemberModel, on_delete=models.CASCADE)
@strawberry_django.type(ProjectModel)
class Project:
name: auto
membership: list["Membership"] = strawberry_django.field(
field_name="membershipmodel_set",
)
@strawberry_django.type(MemberModel)
class Member:
name: auto
membership: list["Membership"] = strawberry_django.field(
field_name="membershipmodel_set",
)
@strawberry_django.type(MembershipModel)
class Membership:
project: Project
member: Member
@strawberry.type
class Query:
projects: Optional[list[Project]] = strawberry_django.field()
schema = strawberry.Schema(query=Query)
def test_query(db):
project = ProjectModel.objects.create(name="my project")
member = MemberModel.objects.create(name="my member")
MembershipModel.objects.create(project=project, member=member)
result = schema.execute_sync("{ projects { membership { member { name } } } }")
assert not result.errors
assert result.data == {
"projects": [
{
"membership": [
{
"member": {"name": "my member"},
},
],
},
],
}
|