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フィールドを追加する前に、シリアライザはid
とname
しか返しませんでしたが、これは当時の正しい動作と予想された動作でした。
私がに行くとき/ 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.
このヒントに続いて、私はFranchiseListSerializer
のurl
分野で引数を設定し、私の知る限りとして彼らは正しいと言うことができます。 DRFの文書であるhereとhereとhereをチェックしてダブルチェックしましたが、解決策が見つかりませんでした。
はStackOverflowの上の他の同様の問題に続いて、私はview_name='franchise_details'
view_name='api:franchise_details'
へ(ジャンゴの名前は、関連するファイルがであるAPP)とview_name='api:franchise_details-detail'
が、無駄に変えてみました。
何かすべてのヘルプは歓迎され、歓声です。
URLにはビュー名 '' db_franchise_details''がありますが、シリアライザには '' franchise_details''があります。したがって、不一致です。 – AKS
ああ、書類はそうでなければ、少なくとも私がそれをどのように読んでいるかのようです。乾杯 – 99lives