2016-04-25 27 views
1

Django REST Framework APIにハイパーリンクを設定しようとしています。私の人生の間、私のエラーがどこで見つからないのですか?Django RESTフレームワークのハイパーリンクURLが解決されない

マイモデル:

class Franchise(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=255) 
    # Other fields 

マイシリアライザ

class FranchiseListSerializer(serializers.HyperlinkedModelSerializer): 
    url = serializers.HyperlinkedIdentityField(
     view_name='franchise_details', 
     lookup_field='id', 
     lookup_url_kwarg='franchiseid' 
    ) 

    class Meta: 
     model = Franchise 
     fields = ('id', 'name', 'url') 

私のURL:これが含まれているURL confにあることを

url(r'^db/franchise/$', views.franchise_index, name='db_franchise_index'), 
url(r'^db/franchise/(?P<franchiseid>[0-9]+)/$', views.franchise_details, name='db_franchise_details') 

注意、私のすべてのAPI機能は、/の中に入りますapi/url

マイビュー:FranshiseDetailSerializerは、上で見ただけで正常に動作することを

@api_view(['GET']) 
def franchise_index(request, format=None): 
    franchise_list = Franchise.objects.all() 
    serializer = FranchiseListSerializer(franchise_list, many=True, context={'request': request}) 
    return Response(serializer.data) 

@api_view(['GET']) 
def franchise_details(request, franchiseid, format=None): 
    franchise = Franchise.objects.get(id=franchiseid) 
    serializer = FranshiseDetailSerializer(franchise) 
    return Response(serializer.data) 

注意。

概要:

  • URL/API/DB /フランチャイズ/ FranchiseListSerializerによってシリアライズデータを返すビューfranchise_index、に行きます。
  • URL/API/DB /フランチャイズ/ <franchiseid> /(ファインワークス)FranchiseDetailSerializerによってシリアライズデータを返すビューfranchise_details、に行く

あなたが見ることができるように、私はFranchiseListSerializerにURLフィールドを追加し、その私は、対応するフランチャイズの詳細ページにリンクするはずです。 URLフィールドを追加する前に、シリアライザはidnameしか返しませんでしたが、これは当時の正しい動作と予想された動作でした。

私がに行くとき/ API/DB /フランチャイズ/今、私はエラーを取得:

ImproperlyConfigured at /api/db/franchise/ 
Could not resolve URL for hyperlinked relationship using view name "franchise_details". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field. 

このヒントに続いて、私はFranchiseListSerializerurl分野で引数を設定し、私の知る限りとして彼らは正しいと言うことができます。 DRFの文書であるhereherehereをチェックしてダブルチェックしましたが、解決策が見つかりませんでした。

はStackOverflowの上の他の同様の問題に続いて、私はview_name='franchise_details'view_name='api:franchise_details'へ(ジャンゴの名前は、関連するファイルがであるAPP)とview_name='api:franchise_details-detail'が、無駄に変えてみました。

何かすべてのヘルプは歓迎され、歓声です。

+0

URLにはビュー名 '' db_franchise_details''がありますが、シリアライザには '' franchise_details''があります。したがって、不一致です。 – AKS

+0

ああ、書類はそうでなければ、少なくとも私がそれをどのように読んでいるかのようです。乾杯 – 99lives

答えて

0

@ AKSの約束のおかげで、私はそれを理解しました。 view_nameは、実際にはビューのURLではなく、URLの名前です。私がドキュメントを読む方法(そしてview_nameではなく、url_nameであること)から、それはビューの名前であると言われていたようです。

私は実際にはview_name='db_franchise_details'(私のURL名)を使ってみましたが、これはうまくいきませんでした。 AKSがそのコメントを私に約束した後、私はもう一度試してみましたが、また動作するview_name='api:db_franchise_details'を使って試しました!

関連する問題