我想在我的Django REST框架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(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')
注意,這是一個包含URL的conf,我所有的API功能變爲內/ api/url
個我的觀點:
@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)
注意FranshiseDetailSerializer
看到上面的工作就好了。
總結:
- URL/API /分貝/連鎖/轉到視圖
franchise_index
,它返回由FranchiseListSerializer
序列化的數據。 - URL/API/DB /連鎖/
<franchiseid>
/轉到視圖franchise_details
,它返回FranchiseDetailSerializer
序列數據(正常工作)
正如你可以看到,我添加了一個URL字段FranchiseListSerializer
,其中我應該鏈接到相應的特許經營細節頁面。在添加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,但沒有找到解決方案。
繼#2等類似的問題,我試圖改變view_name='franchise_details'
到view_name='api:franchise_details'
(Django的名稱應用程序中的相關文件中)和view_name='api:franchise_details-detail'
,但無濟於事。
任何和所有的幫助表示讚賞,歡呼聲。
在url中你有view_name''db_franchise_details'',但是在序列化程序中你有''franchise_details''因此不匹配。 – AKS
啊,文件似乎說,否則,至少我怎麼讀它。乾杯 – 99lives