Django 如何修改可浏览的API表单
目前,我正在创建一个UserRegistration视图,它应该显示带有密码/确认密码字段的表单。问题是可浏览的API只显示模型定义中出现的字段Django 如何修改可浏览的API表单,django,django-rest-framework,Django,Django Rest Framework,目前,我正在创建一个UserRegistration视图,它应该显示带有密码/确认密码字段的表单。问题是可浏览的API只显示模型定义中出现的字段 我应该如何调整表单以便能够添加自定义字段 class UserRegistrationSerializer(serializers.ModelSerializer): password = serializers.CharField( max_length=128, widget=widgets.Passwo
- 我应该如何调整表单以便能够添加自定义字段
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
- 另外,区分输入序列化程序和输出序列化程序的最佳方法是什么
视图
或视图集
中定义它。序列化程序不以这种方式控制可浏览的API,它只处理将对象从本机格式转换为某种序列化格式并返回
既然你没提,我猜你在用
您可能想查看的文档的具体部分是:Django Rest框架实际上使用了正常的Django表单,这些表单被呈现到可浏览的API视图中 可以通过修改所使用的渲染器来控制窗体的外观: 例如:
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
我不知道你是否可以在表单创建后修改它,我还没有尝试过。如果没有,您可以重写创建表单的整个函数。如果您可以添加表单字段,那就更好了