簡體   English   中英

Graphene-Django嵌套過濾器(中繼)

[英]Graphene-Django nested filters (relay)

我正在嘗試使用graphene-django的DjangoFilterConnectionField實現以下DjangoFilterConnectionField

{
  allUsers(username_Icontains: "abc") {
    edges {
      node {
        id
        demographics (name_Icontains: "xyz") {
          id
          name
        }
      }
    }
  }
}

我知道在graphene django中,可以使用graphene的List進行嵌套過濾,但是我不確定是否可以使用DjangoFilterConnectionField解決此問題。

我有以下石墨烯(中繼)架構:

class UserNode(DjangoObjectType):
    class Meta:
        model = User
        interfaces = (Node,)
        filter_fields = {
            'username': ['exact', 'icontains', 'in'],
        }

class DemographicNode(DjangoObjectType):
    class Meta:
        model = Demographic
        interfaces = (Node,)
        filter_fields = {
            'name': ['icontains'],
        }

 class Query(ObjectType):

    user = Node.Field(UserNode)
    all_users = DjangoFilterConnectionField(UserNode)

    demographic = Node.Field(DemographicNode)
    all_demographics = DjangoFilterConnectionField(DemographicNode)

文檔中 ,建議在連接的節點上也引入每個過濾器。 所以會像這樣:

class UserNode(DjangoObjectType):
    class Meta:
        model = User
        interfaces = (Node,)
        filter_fields = {
            'username': ['exact', 'icontains', 'in'],
            'demographic__name': ['icontains']
        }

但是我認為必須有更好的方法來執行此操作,因為我必須對20個以上的嵌套節點執行此操作。

我認為您在這兩個模型之間有一個OneToOneField,如果的確是這樣,則不能有類似的內容,因為它不合邏輯

想象一下,如果一個用戶有一個人口統計信息,而您檢索了allUsers,那么對於每個用戶,我們都有一個人口統計信息,並且過濾一個人口統計信息是不合邏輯的。 做到這一點的唯一方法是使用UserNode對其進行過濾(如您所說和所做的)

如果您要對用戶模型使用ForeignKey或ManyToManyField,則嵌套過濾就可以工作,然后可以使用單獨的過濾器在用戶中檢索

希望我能向您說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM