のdjango restフレームワークのModelViewSetクラスでフォームをレンダリングする残りのフレームワークを使用して私のdjangoモデルのボイラープレートフォームを作成したいと思います。APIView
ドキュメントではAPIView:http://www.django-rest-framework.org/topics/html-and-forms/#rendering-formsを使用しています。
しかし、私はカスタムアクションメソッドの定義を避けるためにModelViewSetを使いたいと思います。
これは可能ですか?あなたは例を共有できますか?
これは私が試みたものです。私のモデル:
class Person(AbstractUser):
pass
マイシリアライザ:
class PersonSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Person
fields = ('first_name', 'last_name', 'email', 'groups')
マイビュー:
class PersonViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows persons to be viewed or edited.
"""
queryset = Person.objects.all().order_by('-date_joined')
serializer_class = PersonSerializer
renderer_classes = [TemplateHTMLRenderer]
template_name = 'common/rest_create.html'
そして、ここでは私のURLです:
url(r'person_create_api/$', PersonViewSet.as_view({'get': 'create'}), name='person-create-api'),
そして、私が取得エラー:
IntegrityError at /school/person_create_api/
duplicate key value violates unique constraint "school_person_username_key"
DETAIL: Key (username)=() already exists.
私はシリアライザフィールドにusername
フィールドを追加すると、私が手:
HTTP/1.0 400 Bad Request
Date: Tue, 20 Sep 2016 17:00:22 GMT
Server: WSGIServer/0.2 CPython/3.5.1+
X-Frame-Options: SAMEORIGIN
Vary: Cookie
Allow: GET, HEAD, OPTIONS
Content-Type: text/html; charset=utf-8
私はジャンゴ1.9と最新のDRF 3.4.6を使用しています。
この機能があれば、私はそのビューの内容を取り上げ、他のビューで使用します。 – mehmet
ModelViewSetの基本クラスは、ModelViewSet> GenericViewSet> GenericAPIView> APIViewです。したがって、APIViewを継承します。 – mehmet
どのバージョンのDRFとDjangoを使用していますか? あなたが作成したmodelviewsetでオーバーレイ/オーバーロードするのではなく、期待どおりの結果を得られないかもしれないとして、あなたのgetを 'as_view'として定義しています。 また、DRFのAPIエンドポイントをルーティングする従来の方法であるルータも使用していません。彼らはドキュメンテーション(http://www.django-rest-framework。org/api-guide/routers /#custom-routers)を参照してください。 「Person」のシリアライザやモデルがどのようなものかわかりません。おそらくそれを含めることができますか? – tredzko