0

外部キーを許可するビューとシリアライザーを作成する方法について、django と django rest フレームワークに関するすべてのドキュメントを接続するのに非常に苦労しています。

編集: ここに答えがあるかもしれません: http://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers

例 私はこれらのモデルを持っています。

class SearchCity(models.Model):
    city = models.CharField(max_length=200)

class SearchNeighborhood(models.Model):
    city = models.ForeignKey(SearchCity, on_delete=models.CASCADE)
    neighborhood = models.CharField(max_length=200)

都市を選択して、その都市にあるすべての近隣を表示し、近隣を追加、編集、近隣を削除できるようにしたいと考えています。

おそらく、都市が持つすべての地区を取得するか、都市の新しい地区を作成するための URL

url(r'^neighborhood/(?P<citypk>[0-9]+)$', SearchNeighborhoodListCreate.as_view()),

もう 1 つは近隣を編集および削除するためのものです。

url(r'^neighborhood/(?P<citypk>[0-9]+)/(?P<neighborhoodpk>[0-9]+)$',SearchNeighborhoodDetail.as_view()),

現在、DRF GenericsのListCreateAPIViewとを使用しています。RetreiveUpdateDestoryAPIView

query_setrelatedモデルが持つすべての関係を取得できるようなオプションがあることを理解しています。

私たちには選択肢があることを知っていx_setます。私の例ではこのように使用されています。Searchcity.SearchNeighborhood_set.all()

関連するシリアライザーがあることは知っています

そして、私がそれらを作成する適切な方法は次のとおりです。

class CityNeighborhoodSerializer(serializers.ModelSerializer):
    neighborhood = serializers.PrimaryKeyRelatedField(many=True, read_only=False)

    class Meta:
        model = SearchCity
        fields = ('City', 'neighborhood')

しかし、このユースケースではどのように使用すればよいでしょうか?

http://www.django-rest-framework.org/api-guide/relations/#serializer-relations

リンクはここにあります http://gregblogs.com/tlt-how-to-retrieve-the-fields-of-a-related-model-from-a-django-残りのフレームワーク エンドポイント/

しかし、それは関連するオブジェクトの編集、削除で機能しますか?

最終的に、私は多くの調査を行いましたが、亀裂を埋め、このことを本当に理解するために助けを求めています. これは一般的な使用例であり、多くのユーザーが以前に使用したことがあると確信しています。

編集:

この質問は間接的に私の答えのように見えますが、まだわかりません。これからも様子を見ながらテストしていきたいと思います。私が見つけたものを見てください。

外部キーとして使用される削除オブジェクト

4

2 に答える 2

0

ここで、もう一度自分の質問に答えます...

最良の方法は、都市ごとにオブジェクトを作成および取得するための独自のビューを作成することでした。

# create and get list of Search Neighborhood objects by city
class CityNeighborhoodsListCreate(APIView):

    # this get request gets all the neighborhoods by city
    def get (self, request, format=None, *args, **kwargs):
        citypk = kwargs.get('citypk', None)
        city = get_object_or_404(SearchCity,pk=citypk)
        neighborhoods = city.searchneighborhood_set.all()
        serialized = SearchNeighborhoodSerializer(neighborhoods, many=True)
        return Response({
            'neighborhoods': serialized.data
        })

    def post(self, request, *args, **kwargs):
        citypk = kwargs.get('citypk', None)
        city=get_object_or_404(SearchCity,pk=citypk)
        serialized = SearchNeighborhoodSerializer(data=request.data)
        if serialized.is_valid(raise_exception=True):
            validatedData = serialized.validated_data
            neighborhood = validatedData.get('neighborhood')
            neighborhoodobject = SearchNeighborhood(neighborhood= neighborhood, city = city)
            neighborhoodobject.save()
            createdneighborhood = SearchNeighborhoodSerializer(neighborhoodobject)
            return Response({
                'neighborhood': createdneighborhood.data
            })
于 2018-03-03T07:03:15.590 に答える