Se provo a filtrare su un campo in un oggetto correlato, Tastypie restituisce un errore. Ad esempio, l'esecuzioneCome si filtra su un campo in un oggetto correlato?
curl -H "Accept: application/json" \
"http://localhost:8080/wordgame/api/v1/rounds/?format=json&players__username=moe"
restituisce "Le ricerche non sono ammessi più di un livello profondo sul campo 'giocatori'." In sostanza, sto cercando di fare quello che posso fare attualmente nella shell Django:
Round.objects.all().filter(players__username=moe.username)
Sto usando il codice seguente, che ho semplificato per brevità:
# 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)
. . .
Sto assumendo che, a causa UserResource definisce un filtro sul campo 'username' che dovrebbe funzionare ma non lo fa. Ho anche tentato di aggiungere "players__username" al filtro in RoundResource, tuttavia non ha funzionato neanche.
Ho letto su basic filtering in the docs e ho guardato il codice su GitHub tuttavia non sembra esserci nulla per questo. Ho anche dato uno sguardo allo advanced filtering documentation e non sembra adattarsi al mio caso d'uso. Ho guardato il codice Tastypie su GitHub ma non lo capisco abbastanza da capire se 1) sto facendo questo sbagliato, o 2) cosa sovrascrivere per farlo funzionare.
Suppongo che 'ManyToManyField' sia un refuso; [i documenti Tastypie] (http://django-tastypie.readthedocs.org/en/latest/fields.html) lo hanno come 'fields.ToManyField' – supervacuo
@supervacuo ManyToMany è supportato nella versione corrente come sottoclasse di ToManyField. Puoi trovarlo su GitHub [qui] (https://github.com/toastdriven/django-tastypie/blob/master/tastypie/fields.py#L768). –
Ah, abbastanza giusto. – supervacuo