2013-07-05 13 views
6

Obecnie tworzę widok UserRegistration, który powinien wyświetlać formularz z polami hasła/potwierdzenia hasła. Problem polega na tym, że Browsable API wyświetla tylko te pola, które występują w definicji modelu.Jak zmodyfikować formularz interfejsu API do przeglądania

  • W jaki sposób należy poprawić formularz, aby móc dodawać niestandardowe pola?

    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 
    
  • Ponadto, co jest najlepszym sposobem, aby odróżnić serializatora wejściowy z serializatora wyjściowego?

Odpowiedz

0

Dobrze pierwszy którą chcemy zdefiniować to w View lub ViewSet, której używasz. Serializator nie kontroluje w ten sposób interfejsu API do przeglądania, po prostu obsługuje pobieranie obiektów z natywnego do jakiegoś serializowanego formatu iz powrotem.

Ponieważ nie wspominając, jadę odgadnąć używasz http://django-rest-framework.org/

Specyficzną częścią dokumentacji może chcesz sprawdzić to: http://django-rest-framework.org/api-guide/viewsets.html#modelviewset

0

Django Framework Reszta faktycznie używa normalny Django Forms, które są renderowane do widoku interfejsu API do przeglądania.

Można kontrolować wygląd postaci modyfikując Renderer, który jest używany: http://www.django-rest-framework.org/api-guide/renderers#browsableapirenderer

na przykład:

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 

Nie wiem, czy można zmodyfikować formularz po to został stworzony , Nie próbowałem. Jeśli nie, możesz przepisać całą funkcję, która tworzy formularz. Mogłabym dodać pola formularza, które byłyby lepsze.

Powiązane problemy