Ich versuche, einzelne Objektabfragen auf den Benutzer zu beschränken, der sie erstellt hat.
Models.py
class Env(models.Model):
name = models.CharField(max_length=50)
user = models.ForeignKey(
User, on_delete=models.CASCADE)
description = TextField()
Schema.py
class EnvNode(DjangoObjectType):
class Meta:
model = Env
filter_fields = {
'name': ['iexact'],
'description': ['exact', 'icontains'],
}
interfaces = (relay.Node, )
Query(object):
env = relay.Node.Field(EnvNode)
all_envs = DjangoFilterConnectionField(EnvNode)
Ich habe versucht, eine Auflösungsabfrage hinzuzufügen, aber sie funktionierte nur für die Abfrage "all_env" mit dem Filter und nicht für die Einzelobjektabfrage
def resolve_env(self, info):
env = Env.objects.filter(user = info.context.user.id)
if env is not None:
return env
else:
return None
Es wurde auch versucht, dem EnvNode eine Klassenmethode hinzuzufügen, wie hier unter Filtern des knotenbasierten ID-Zugriffs empfohlen :
@classmethod
def get_node(context, cls, id, info):
try:
env = cls._meta.model.objects.get(id = id)
except cls._meta.model.DoesNotExist:
return None
if context.user == env.user:
return env
return None
aber ich habe einen Fehler bekommen:
"message": "get_node() missing 1 required positional argument: 'info'",
Die Dokumentation scheint nicht korrekt zu sein, auch Ihre Parameter sind nicht in der richtigen Reihenfolge für die Methode get_node .
Es gibt nur drei Parameter für den Anruf
Sie sollten es so schreiben, damit die Einschränkung funktioniert:
@classmethod
def get_node(cls, info, id):
try:
env = cls._meta.model.objects.get(id=id, user=info.context.user)
except cls._meta.model.DoesNotExist:
return None
return env
Ich hoffe es hilft.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen