2016-12-15 2 views
3

私は次の操作を行いたいレンダリング:この後、私が見える私のシリアライザを作成しフォームビューセットDjangoの残りFrameworkは

class User(models.Model): 
    id = models.AutoField(primary_key=True) 
    field1 = models.CharField(max_length=100) 
    fk1 = models.ForeignKey(Group) 
goes on 

私のモデルでは

のような:

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = UserSerializer 
     fields = (...) 

    ... 

最後に、次のようなビューセットを作成します。

class UserViewSet(viewsets.ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

しかし、私はどのようにビューセットを作成することができますか?たとえば、私のクラスでフォームを生成することはできますか?私の最終的な考えは、次のようなことをすることです:

def my_view(request): 
    my_form = UserViewSet.as_view({'get': 'list'}(request)) 
    # from here either to be able to use .render().content 
    # or, inside the template, render with {% render_form my_form %} 

これは可能ですか?ありがとうございます

答えて

1

あなたが示唆していることは可能ですが、通常は意味をなさない。 Django Rest Frameworkは、apiとの間で情報を送受信できるように、JSON形式のAPIを作成するのに最適です。

フォームを取得するには、レンダリングされたHTMLをサーバーから取得する必要があります。これはDjango自身のためのより良い仕事です。あなたがしようとしているものを行うためにCreateViewを使用することができます。

def UserCreateView(CreateView): 
    model = User 
    form_class = "name_of_your_form.html" # Or you could call the form 'user_create_form.html` and leave this line out. 
    fields = [...] 

あなたのフォームはその後、ドキュメントごとに、あなたのテンプレートで利用できるようになります:ドキュメントとして

<form action="" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Save" /> 
</form> 
+0

はあなたが私にそうするより良い方法を提案することができます?私は良い習慣に開放されています..私はちょうどそれを学び始めています..私はシリアライザを維持する必要があります – Bobleujr

1

は言う:

シリアライザは、render_formテンプレートタグを使用し、シリアライザインスタンスをテンプレートのコンテキストとして含めることで、フォームとしてレンダリングできます。

次の例はおそらくあなたのために働くでしょう。しかし、どのように@YPCrumbleサイードDRF目標は簡単で、速いフォーム

をレンダリングしない、APIを構築
class UserDetail(APIView): 
    renderer_classes = [TemplateHTMLRenderer] 
    template_name = 'your_template.html' 

    def get(self, request, pk): 
     serializer = UserSerializer(profile) 
     return Response({'serializer': serializer}) 

    def post(self, request, pk): 
     user = get_object_or_404(User, pk=pk) 
     serializer = UserSerializer(data=request.data) 
     if not serializer.is_valid(): 
      return Response({'serializer': serializer}) 
     serializer.save() 
     return redirect('some_url_name') 

テンプレートファイル:

{% load rest_framework %} 
<html><body> 

    <form action="{% url 'user_url' pk=user.pk %}" method="POST"> 
     {% csrf_token %} 
     {% render_form serializer %} 
     <input type="submit" value="Save"> 
    </form> 

</body></html> 

`DRF Docs link

関連する問題