Wenn ich versuche, auf ein Feld in einem verwandten Objekt zu filtern, gibt Tastypie einen Fehler zurück. Zum Beispiel läuftWie filtere ich ein Feld in einem verwandten Objekt?
curl -H "Accept: application/json" \
"http://localhost:8080/wordgame/api/v1/rounds/?format=json&players__username=moe"
returns „Lookups ist nicht mehr als eine Ebene tief auf der‚Spieler‘erlaubt ist.“ Im Grunde versuche ich zu tun, was ich zur Zeit in der Django Shell tun können:
Round.objects.all().filter(players__username=moe.username)
ich den folgenden Code verwenden, die ich die Kürze halber vereinfachte:
# wordgame/api.py which has tastypie resources
class RoundResource(ModelResource):
players = fields.ManyToManyField(UserResource, 'players',full=True)
. . .
class Meta:
queryset = Round.objects.all()
resource_name = 'rounds'
filtering = {
'players': ALL,
}
class UserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'players'
filtering = {
'username': ALL,
}
# wordgame/models.py which has Django models
class Round(models.Model):
players = models.ManyToManyField(User)
word = models.CharField(max_length=75)
. . .
Ich gehe davon aus, dass wegen UserResource definiert einen Filter für das Feld 'Benutzername', der funktioniert, tut dies aber nicht. Ich habe sogar versucht, dem Filter in RoundResource "players__username" hinzuzufügen, aber das hat auch nicht funktioniert.
Ich lese über basic filtering in the docs und schaute auf den Code auf GitHub, aber es scheint nichts dafür zu sein. Ich habe mir auch die advanced filtering documentation angesehen und es scheint nicht zu meinem Anwendungsfall zu passen. Ich habe mir den Tastypie-Code auf GitHub angeschaut, verstehe ihn aber nicht genug, um herauszufinden, ob 1) ich das falsch mache, oder 2) was ich außer Kraft setzen muss, um dies zum Laufen zu bringen.
Ich nehme an, 'ManyToManyField' ist ein Tippfehler; [the Tastypie docs] (http://django-tastypie.readthedocs.org/en/latest/fields.html) habe es als 'fields.ToManyField' – supervacuo
@supervacuo ManyToMany wird in der aktuellen Version als Unterklasse von ToManyField unterstützt. Sie finden es auf GitHub [hier] (https://github.com/toastdriven/django-tastypie/blob/master/tastypie/fields.py#L768). –
Ah, fair genug. – supervacuo