2016-12-21 4 views
0

私はすでにdjango 1.9プロジェクトで定義されたフォームをたくさん持っています。今はREST(DRF 3.5.3)としてエクスポートする必要があります。django.forms.Formとrest_framework.serializersの間にコンバーターがありますか?

ちょっとハッキングするだけで、GETメソッドとPUTメソッドを提供することができました。しかし、私はOPTIONSメソッドを提供する必要もあり、私はそれを行うのに役立つ何かを見つけることができないようです。

したがって、インスタンス化されたフォームをDRFシリアライザ/ビューセットに変換するものがありますか?

答えて

0

私は形で私のカスタム・ロジックのすべてを台無しにしたくなかったが、私はちょうどas_options方法を追加しました:

class APIViewForm(Form): 

    def as_dict(self): 
     return {fld.auto_id: self.initial.get(fld.name, None) for fld in self} 

    def as_options(self): 
     flds = {} 
     for fld in self: 
      flds[fld.name] = f = {} 
      fld = fld.field 
      f.update(dict(
       required=fld.required, 
       read_only=fld.disabled, 
       label=fld.label, 
      )) 
      if isinstance(fld, (CharField, URLField)): 
       f['type'] = 'field' 
       if fld.max_length: 
        f['max_length'] = fld.max_length 
       if fld.min_length: 
        f['min_length'] = fld.min_length 
      elif isinstance(fld, IntegerField): 
       f['type'] = 'integer' 
       if fld.max_value: 
        f['max_value'] = fld.max_value 
       if fld.min_value: 
        f['min_value'] = fld.min_value 
      elif isinstance(fld, ChoiceField): 
       f['type'] = 'choice' 
       f['choices'] = [dict(value=c[0], display_name=c[1]) for c in fld.choices] 
      elif isinstance(fld, DateTimeField): 
       f['type'] = 'datetime' 

     return dict(
      name=self.__class__.__qualname__, 
      description='', 
      renders=['application/json'], 
      parses=['application/json'], 
      actions=dict(PUT=flds) 
     ) 

トリックを行うようだが

関連する問題