2013-07-05 9 views
6

Attualmente, sto creando una vista UserRegistration, che dovrebbe visualizzare il modulo con i campi password/conferma password. Il problema è che l'API Sfogliabile visualizza solo i campi che si verificano nella definizione del modello.Come modificare il modulo API Sfogliabile

  • Come devo modificare il modulo in modo che sia possibile aggiungere campi personalizzati?

    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 
    
  • Inoltre, qual è il modo migliore per distinguere il serializzatore ingresso dal serializzatore uscita?

risposta

0

Ben prima che ci si vuole definire questo nel View o ViewSet che si sta utilizzando. Il serializzatore non controlla l'API navigabile in questo modo, ma semplicemente gestisce il prelievo di oggetti dal formato nativo ad alcuni formati serializzati e viceversa.

Dal momento che non parla, ho intenzione di indovinare che si sta utilizzando http://django-rest-framework.org/

La parte specifica della documentazione si consiglia di verificare è: http://django-rest-framework.org/api-guide/viewsets.html#modelviewset

0

Django Resto quadro in realtà utilizza normale Moduli Django che vengono renderizzati nella vista API Sfogliabile.

È possibile controllare l'aspetto del modulo modificando il renderer che viene utilizzato: http://www.django-rest-framework.org/api-guide/renderers#browsableapirenderer

Ad esempio:

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 

Non so se è possibile modificare un modulo dopo che è stato creato , Non ho provato In caso contrario, è possibile riscrivere l'intera funzione che crea il modulo. Potresti aggiungere campi modulo, sarebbe preferibile.

Problemi correlati