Django フレームワークと Django REST フレームワークは初めてですが、基本的なセットアップと実装は実行できました。http://mydomain.com/location/1 (1 は主キー) など、単一のオブジェクトのドメインを呼び出すと、魔法のように機能します。これにより、次のような JSON 応答が得られます。
{"id": 1, "location": "Berlin", "country": 2}
.. およびhttp://mydomain.com/country/2応答は次のようになります。
{"id": 2, "country": "Germany"}
必要なもの:ドメインhttp://mydomain.com/all_locations/ を呼び出すときなど、複数の場所を取得する必要があります。次のような応答が期待されます。
[
{"id": 1, "location": "Berlin", "country": 2},
{"id": 2, "location": "New York", "country": 4},
{"id": 3, "location": "Barcelona", "country": 5},
{"id": 4, "location": "Moscow", "country": 7}
]
これはオプションです: 2 番目のステップでは、 http://mydomain.com/mix_all_locations_countries/を呼び出すときに、1 つの応答で複数の国と場所を取得したいと考えています。たとえば、次のようになります。
[
{"locations":
{"id": 1, "location": "Berlin", "country": 2},
{"id": 2, "location": "New York", "country": 4},
{"id": 3, "location": "Barcelona", "country": 5},
{"id": 4, "location": "Moscow", "country": 7}
},
{"countries":
{"id": 1, "country": "Brazil"}
{"id": 2, "country": "Germany"},
{"id": 3, "country": "Portugual"}
{"id": 4, "country": "USA"},
{"id": 5, "country": "Spain"},
{"id": 6, "country": "Italy"}
{"id": 7, "country": "Russia"}
}
]
これまでの私の実装は次のとおりです(場所の実装を示しているだけです):
models.pyで:
class Location(models.Model):
# variable id and pk are always available
location = models.CharField(max_length=100)
country = models.ForeignKey("Country")
serializers.pyで:
class LocationsSerializer(serializers.ModelSerializer):
country_id = serializers.Field(source='country.id')
class Meta:
model = Location
fields = (
'id',
'location',
'country_id',
)
views.pyで:
class LocationAPIView(generics.RetrieveAPIView):
queryset = Location.objects.all()
serializer_class = LocationSerializer
urls.pyで:
url(r'^location/(?P<pk>[0-9]+)/$', views.LocationAPIView.as_view(), name='LocationAPIView')
私が試したこと:上記のドメインを呼び出すときに単一のオブジェクトに対して機能するため、モデルとシリアライザーを変更する必要はないと思います。そこで、 を実装して に新しい URL を追加しようとしLocationsViewSet
ましviews.py
たurls.py
が、失敗しました。どのように実装できるか考えていますか? おそらく、LocationAPIView でメソッドを定義し、次のような URL を変更して定義します。
url(r'^all_locations/$', views.LocationAPIView.get_all_locations(), name='LocationAPIView')
事前に感謝します。助けていただければ幸いです。
敬具、マイケル