10

目前,我正在创建一个 UserRegistration 视图,它应该显示带有密码/确认密码字段的表单。问题是 Browsable API 仅显示模型定义中出现的字段。

  • 我应该如何调整表单以便能够添加自定义字段?

    class UserRegistrationSerializer(serializers.ModelSerializer):
    
        password = serializers.CharField(
            max_length=128,
            widget=widgets.PasswordInput,
            label=_('Password')
        )
        password_confirm = serializers.CharField(
            max_length=128,
            widget=widgets.PasswordInput,
            label=_('Confirm password')
        )
    
        class Meta:
            model = User
            fields = ('id', 'name', 'username', 'email', 'password', 'registration_date')
    
        def validate(self, attrs):
            if attrs.get('password') and attrs.get('password_confirm'):
                if attrs['password'] != attrs['password_confirm']:
                    raise serializers.ValidationError(_("Passwords do not match"))
            return attrs
    
  • 另外,区分输入串行器和输出串行器的最佳方法是什么?

4

2 回答 2

0

那么首先你想在你正在使用的View或中定义它。ViewSet序列化程序不以这种方式控制可浏览的 API,它只是处理将对象从本机获取到某种序列化格式并返回。

既然你没有提到,我猜你正在使用http://django-rest-framework.org/

您可能要查看的文档的具体部分是:http ://django-rest-framework.org/api-guide/viewsets.html#modelviewset

于 2013-08-27T18:30:57.993 回答
0

Django Rest Framework 实际上使用呈现到 Browsable API 视图的普通 Django 表单。

您可以通过修改使用的渲染器来控制表单的外观:http: //www.django-rest-framework.org/api-guide/renderers#browsableapirenderer

例如:

class MyBrowsableAPIRenderer(BrowsableAPIRenderer):
    # either
    def get_context(self, *args, **kwargs):
        context = super(MyBrowsableAPIRenderer, self).get_context(*args, **kwargs)
        context["post_form"] = django.form.Form()  # modify form here          

    # or
    def get_rendered_html_form(self, view, method, request):
        # do things here to create full Form

@renderer_classes((JSONRenderer, MyBrowsableAPIRenderer)):
    class MyViewSet(GenericViewSet):
        pass

不知道Form创建后能不能修改,没试过。如果没有,您可以重写创建表单的整个函数。我可以添加表单字段,这将是可取的。

于 2014-10-14T14:48:33.343 回答