Ciao Sono nuovo sia per Django che per il Django-Rest-Framework. Ho seguito le esercitazioni. Quello che sto cercando di fare (come esercizio di apprendimento) è restituire un oggetto basato su un campo diverso dalla chiave primaria.Ottieni oggetto per campo diverso dalla chiave primaria
myserver:8000/videos
restituisce un elenco di tutti i video.myserver:8000/videos/1
ritorna il video con chiave primaria di 1
Quello che vorrei fare è:
myserver:8000/videos/:videoname
restituisce il video in cuivideoname = videoname
Ho il seguente video del modello :
class Videos (models.Model):
videoID = models.IntegerField(blank=True, null=True)
videoName = models.CharField(max_length=20)
class Meta:
app_label="quickstart"
Il mio router è configurato come:
video_detail = views.VideoDetailView.as_view({
'get':'list'
})
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^videos/(?P<videoName>[^/]+)/$', video_detail)
)
E mio punto di vista è definito come:
class VideoDetailView(viewsets.ModelViewSet):
serializer_class = VideosSerializer
def get_queryset(self):
videoName = self.kwargs.get(videoName, None)
queryset = super (VideoDetailView,self).get_queryset()
if videoName:
queryset = queryset.filter(videoName=videoName)
return queryset
Le piste API, ma quando mi ha colpito: myserver:8000/videos/SecondVideo/
(dove "SecondVideo" è il nome del video) Ottengo un errore 404.
Qualsiasi aiuto?
sono andato avanti e ha aggiunto il lookup_field e ho ancora ottenere un 404. Altre idee ? O ragioni per cui questo non funzionerebbe? – rackhamup
Questo ha funzionato per me una volta ottenuto l'URL corretto. Per le persone nuove a Django, ecco l'URL che useresti per cercare un video in cui videoName = 'SecondVideo': http: // localhost: 8000/videos/SecondVideo /? Format = json – Luke