2016-08-16 4 views
0

投稿を作成できるビューを作成しようとしていますが、同じページにobject_listが表示されます。また、オブジェクトであっても更新や削除が可能です。Django/Python:作成、リスト、更新、削除を単一のビューまたは一般ビューで書く方法は?

Country Capital 
India Delhi  UPDATE DELETE 
USA  Washington UPDATE DELETE 
----- ------ 

これを達成するのに役立ちますか、同様のタイプの質問を提案していただきありがとうございます。

答えて

1

あなたが探しているものがミックスインされています。

次のパラメータを使用して、詳細ビュークラスを作成してみてください:たとえば

mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView

:あなたはDRFのように、ビューセットもまともであれば、ダニエルが提案したように

class ObjectDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView): 

    queryset = Object.objects.all() 

代替。しかし、それらは正確には簡潔ではないので、私は可能な限り一般的に避けています。

しかし、ModelViewSetのようなものは、私が一般的に選ぶアプローチと非常に明確です。ここで

は例です:

class ObjectViewSet(viewsets.ModelViewSet): 

    queryset = Object.objects.all() 

    def perform_create(self, serializer): 
     serializer.save(owner=self.request.user) 

美しい、それはないですか?

詳細については、DRFチュートリアルを参照してください。http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers/

1

ビューとテンプレートを混合しています。ハンドル要求を表示し、コンテンツとリンクを表示するテンプレート。 あなたは投稿のリストを含むリストビューを持っています。テンプレートでは、更新用のフォーム、作成用のフォーム、および削除用のフォームを追加します。各フォームには、適切な表示にリンクされた属性アクションがあります。したがって、更新フォームは、UpdateViewでurlにリンクし、CreateViewにフォームを作成し、DeleteViewに削除します。各フォームでリダイレクトをListViewに戻します。あなたがDjangoだけを使いたいなら、この方法です。

OR

あなたは本当に爽やかでリダイレクトすることなく、1つのページに扱うすべてのものにしたい場合。 ajaxとdjango-rest-frameworkとそのviewsetを使用できます。ビューセットでは、リストの作成、更新、プッシュ、ディテールを1つのクラスで処理できます。

ビューセット:

class UserViewSet(viewsets.ViewSet): 
    """ 
    Example empty viewset demonstrating the standard 
    actions that will be handled by a router class. 

    If you're using format suffixes, make sure to also include 
    the `format=None` keyword argument for each action. 
    """ 

    def list(self, request): 
     pass 

    def create(self, request): 
     pass 

    def retrieve(self, request, pk=None): 
     pass 

    def update(self, request, pk=None): 
     pass 

    def partial_update(self, request, pk=None): 
     pass 

    def destroy(self, request, pk=None): 
     pass 
関連する問題