2013-07-05 25 views
6

Hiện tại, tôi đang tạo chế độ xem UserRegistration, sẽ hiển thị biểu mẫu có mật khẩu/xác nhận các trường mật khẩu. Vấn đề là API có thể duyệt chỉ hiển thị các trường xuất hiện trong định nghĩa của mô hình.Cách sửa đổi biểu mẫu API có thể duyệt

  • Làm cách nào để tinh chỉnh biểu mẫu để có thể thêm trường tùy chỉnh?

    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 
    
  • Ngoài ra, cách tốt nhất để phân biệt bộ nối tiếp đầu vào từ bộ nối tiếp đầu ra là gì?

Trả lời

0

Trước tiên, bạn muốn xác định điều này trong View hoặc ViewSet mà bạn đang sử dụng. Trình nối tiếp không kiểm soát API có thể duyệt theo cách đó, nó chỉ xử lý việc lấy các đối tượng từ gốc sang một số định dạng được tuần tự hóa và ngược lại.

Vì bạn không đề cập đến, tôi sẽ đoán bạn đang sử dụng http://django-rest-framework.org/

Các phần cụ thể của tài liệu bạn có thể muốn kiểm tra là: http://django-rest-framework.org/api-guide/viewsets.html#modelviewset

0

Django Nghỉ ngơi Khung thực sự sử dụng bình thường Các biểu mẫu Django được hiển thị trong chế độ xem API có thể duyệt.

Bạn có thể kiểm soát các giao diện của các hình thức bằng cách sửa đổi Renderer được sử dụng: http://www.django-rest-framework.org/api-guide/renderers#browsableapirenderer

Ví dụ:

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 

Tôi không biết nếu bạn có thể sửa đổi một Form sau khi nó đã được tạo , Tôi chưa thử. Nếu không, bạn có thể viết lại toàn bộ hàm tạo biểu mẫu. Tôi có thể thêm các trường biểu mẫu, điều đó sẽ thích hợp hơn.

Các vấn đề liên quan