2016-06-23 4 views
0

私はこの問題について多くを検索しますが、解決策はありません。私は得るビュー名 "場所情報"を使用してハイパーリンクされた関係のURLを解決できませんでした。 APIに関連するモデルを含めることができなかったか、このフィールドにlookup_field属性を正しく設定していない可能性があります。私はdjangoで私のAPIを通してこのリソースにアクセスしたいと思っています。ビュー名 "place-info"を使用してハイパーリンク関係のURLを解決できませんでした。

私はこのようなエラーになっています:私のモデルはお尻です

Could not resolve URL for hyperlinked relationship using view name "place-info". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field. 

を、次のとおりです。

class TourSite(models.Model): 
"""Destination place""" 

place_name = models.CharField(max_length=100, blank=False, default='') 
place_address = models.CharField(max_length=200, blank=False, default='') 
place_image = models.ImageField(upload_to="TourSite", blank=True) 

def get_place_name(self): 
    return self.place_name 

def get_place_address(self): 
    return self.place_address 

def save(self, *args, **kwargs): 
    super(TourSite, self).save(*args, **kwargs) 

def __str__(self): 
    return self.place_name 

class Info(models.Model): 
"""Stores information about the place.""" 
place_name = models.OneToOneField(
     TourSite, 
     on_delete = models.CASCADE, 
     primary_key = True, 
    ) 

famous_for = models.CharField(max_length=200, blank=True, default='') 
brief_info = models.TextField(blank=True, default='') 

def get_famous_for(self): 
    return self.famous_for 

def get_brief_info(self): 
    return self.brief_info 

def get_place_name(self): 
    return self.place_name 

def save(self, *args, **kwargs): 
    super(Info, self).save(*args, **kwargs) 

def __str__(self): 
    return "%s is famous for %s"% (self.place_name, self.famous_for) 

マイSerailizer:

class InfoSerializer(serializers.ModelSerializer): 

class Meta: 
    model = Info 
    fields = '__all__' 

class TourSiteSerializer(serializers.HyperlinkedModelSerializer): 
    place_info = serializers.HyperlinkedIdentityField(view_name='place-info') 

class Meta: 
    model = TourSite 
    fields = ('id', 'place_name','place_info', 'place_address', 'place_image') 

マイビュー:

@api_view(['GET']) 
def api_root(request): 
return Response({ 
     'places': reverse('places-list', request=request), 
    }) 


class TourSiteList(DefaultsMixin, generics.ListAPIView): 
    queryset = TourSite.objects.all() 
    search_fields = ("place_name", "place_address",) 
    serializer_class = TourSiteSerializer 



class TourSiteDetail(DefaultsMixin, generics.RetrieveUpdateDestroyAPIView): 
queryset = TourSite.objects.all() 
serializer_class = TourSiteSerializer 


class Info(generics.ListAPIView): 
queryset = Info.objects.all() 
serializer_class = InfoSerializer 

私のURL

urlpatterns = [ 
url(r'^$', views.api_root), 

url(r'^places/$', views.TourSiteList.as_view(), name="places-list"), 
url(r'^places/(?P<pk>[0-9]+)/$', views.TourSiteDetail.as_view(), name="places-detail"), 

url(r'^info/$', views.Info.as_view(), name='place-info'), 
] 

どのように私はこの問題を解決することができますか?

答えて

0

私がコメントすることはできませんので:

あなたclass Metaクラスが間違ってインデントを持っています。彼らは適切なクラスの内側にインデントされるべきです。それが単なる転写エラーであれば、それは問題のために修正されるべきです。

+0

私は私のコードでインデントを修正しました。私が間違いをしているにもかかわらず、ここでインデントが歪んでいる。 – Kiran

0

モデルの主キーであるOneToOneFieldには、HyperlinkedRelatedFieldという同様の状況がありました。

HyperlinkedRelatedFieldlookup_fieldlookup_url_kwargの両方の引数を指定する必要がありました。ここで

は、あなたのシリアライザに適用されるように、このソリューションがどうなるかです:

class TourSiteSerializer(serializers.HyperlinkedModelSerializer): 
    place_info = serializers.HyperlinkedIdentityField(
     view_name='place-info', 
     lookup_field='place_info_id',  # <-- note the `_id` suffix 
     lookup_url_kwarg='place_info', 
    ) 

    class Meta: 
     model = TourSite 
     fields = ('id', 'place_name','place_info', 'place_address', 'place_image') 
関連する問題