2011-04-22 5 views
4

J'ai donc commencé à utiliser le plugin TastyPie pour Django afin de créer une API REST pour mon projet. Je suivais le guide de démarrage avec mon projet, mais quand je suis entré dans this point, quand je devais mettre une clé étrangère, ça a commencé à me donner quelques erreurs.Clé étrangère dans tastypie

L'un maior est quand je fais simple get:

"Reverse for 'api_dispatch_detail' with arguments '()' and keyword arguments '{'pk': 246, 'api_name': 'v1', 'resource_name': 'typep'}' not found." 

Le code dans le resources.py:

class TypeOfPlaceResource(ModelResource): 

    class Meta: 
     queryset = TypeOfPlace.objects.all() 
     resource_name = 'typep' 
     allowed_methods = ['get'] 

class POIResource(ModelResource): 

    typep = ForeignKey(TypeOfPlaceResource, 'typep') 

    class Meta: 
     queryset = PointOfInterest.objects.all() 
     resource_name = 'pois' 
     filtering = { 
      "code1": ALL, 
      "code2": ALL, 
     } 

Et les modèles:

class TypeOfPlace (models.Model): 
    name = models.CharField(max_length=100, blank=True) 
    code = models.CharField(max_length=20, unique=True) 

    def __unicode__(self): 
     return self.name 

class PointOfInterest(GeoInformation): 
    name = models.CharField(max_length=100,blank=True) 
    code1 = models.CharField(max_length=4,null=True, unique=True) 
    code2 = models.CharField(max_length=4,null=True, unique=True) 
    typep = models.ForeignKey(TypeOfPlace) 

    def __unicode__(self): 
     return self.name 

Le urls.py

api = Api(api_name='v1') 
api.register(TypeOfPlaceResource(), canonical=True) 
api.register(POIResource(), canonical=True) 

urlpatterns = api.urls 

Alors, est-ce que je fais quelque chose de mal? Ou manquant quelque chose? Toute aide sera grandement appréciée ! : D

+1

pouvez-vous ajouter votre TastyPie URLconf? – manji

+0

Bien sûr! Juste édité la question principale:] –

+2

quelle url avez-vous tapé qui a causé ce problème? essayez de changer la valeur de 'urlpatterns' en' urlpatterns = patterns ('', (r '^ api /', include (api.urls)),) ' – manji

Répondre

3

La réponse finale pour mon problème est la réponse de @manji et @dlrust combiné:

« changer urlpatterns valeur urlpatterns = patterns('', (r'^api/', include(api.urls)),) »

et, après cela, « définir une autorisation dans votre Meta pour la Ressource".

J'espère que c'est utile pour quelqu'un d'autre car c'était pour moi :)

1

Il semble que votre urlpatterns ait été écrasé.

urlpatterns += api.urls; 

n'ajoutant le += comme ce travail? Il semble qu'en attribuant directement à urlpatterns, vous pourriez être en train de taper de façon inattendue sur votre ancienne mission.