2016-12-05 11 views
0

現在、Django RestFrameworkを使用して、GETとPOSTの両方を使用してDjangoアプリケーション内のデータを取得/挿入するAPIを作成しています。私は現在、DateTimeFieldを取るstart_dt(下記参照)というフィールドを持つTransactionDateTimeというデータベースモデルを持っています。難しいのは、jsonのPOSTデータ構造体(下を参照)に文字列を渡していることです。JSON構造体をループして適切なdatetime構造体に変換するには、createメソッドをオーバーライドする必要があります。私はDjangoシェル(以下を参照)でそれを実行することができたので、文字列をdatetimeに変換するために使用されるロジックを知っていますが、createメソッドをオーバーライドし、createこれを実現させる方法。手伝ってください。以下は、成功したPOSTDjango RestFrameworkからPOSTデータへのcreateメソッドのオーバーライド

で使用するmodels.py

class TransactionDateTime(models.Model): 
    room = models.ForeignKey(Room, on_delete = models.CASCADE) 
    start_dt = models.DateTimeField('start_dateTime') 
    end_dt = models.DateTimeField('end_dateTime', blank=True, null=True) 


    def __str__(self): 
     return str(self.start_dt) 

データ構造からメソッドを作成

TransactionDateTimeモデル内のBIG質問で、GET経由でJSONデータ構造を返している私の見解のコピーであります

[ 
    { 
    "start_dt": "2015-01-28 03:00:00" 
    }, 

    { 
    "start_dt": "2015-01-28 05:30:00" 
    } 
] 

ロジックは、日時

from datetime import datetime 
my_date = datetime.strptime('2015-01-28 05:30:00', '%Y-%m-%d %H:%M:%S') 

に文字列を変換しますジャンゴMIXINと表示

class DateTimeMixin(object): 
    serializer_class = SimpleSerializer4 
    permission_classes = (permissions.IsAuthenticated,) 


class DateTimeViewSet(DateTimeMixin, generics.BulkModelViewSet): 

    def get_queryset(self): 

     num = self.kwargs['dt_rm'] 
     num2 = self.kwargs['id'] 

     r1 = Room.objects.get(id = num) 

     s1 = Schedule.objects.get(pk=num2) 
     u= self.request.user.pk 
     usr = User.objects.get(pk=u) 

     if(s1.user.username == usr.username): 
      queryset = r1.transactiondatetime_set.all() 
      return queryset 
     else: raise Http404("User does not exist") 



    def get_serializer_context(self): 

     num = self.kwargs['id'] 
     s1 = Schedule.objects.get(pk=num) 
     var = s1.user.username 
     context = super(DateTimeViewSet, self).get_serializer_context() 
     return {'request' : var} 


    def created(self, request, *args, **kwargs): 
    ??? 
+2

here is the link to the source on GitHub、物事はrest_framework自体に行われる方法を見て、それはしばしば非常に役に立ちましたあなたのものを含めるように['DATETIME_INPUT_FORMATS'](http://www.django-rest-framework.org/api-guide/settings/#date-and-time-formatting)を変更しようとしましたか? – twil

答えて

1

私はそれについて移動する適切な方法は、例えば、メソッドを作成し、独自のカスタムを書くことではなく、どのように使用する日付フォーマットを受け入れるためにあなたのシリアライザを教えることはないと思います

class SimpleSerializer4(something_here): 
    ... 
    start_dt = serializers.DateTimeField(format=api_settings.DATETIME_FORMAT, input_formats=['%Y-%m-%d %H:%M:%S']) 
    ... 

その後、後であなたがしなければならないすべてはあなたViewSetCreateModelMixinを追加することであり、それは例えば、動作するはずですhere

ドキュメントビューを拡張する上DateTimeField型の

from rest_framework.mixins import CreateModelMixin 
... 
class DateTimeViewSet(DateTimeMixin, CreateModelMixin, generics.BulkModelViewSet): 
... 

ドキュメントは

hereを設定し、私はあなたが持っているので、

関連する問題