簡體   English   中英

Django RestFramework錯誤與POST請求上的DateTimeField序列化程序相關聯

[英]Django RestFramework Error Associate with DateTimeField Serializer on POST Request

基於下面的Serializer,Mixin和View,我能夠通過GET請求成功檢索JSON數據(請參見下文),但是在嘗試執行以下操作時會收到"AttributeError: 'NoneType' object has no attribute 'request'"通過Django Restframework執行JSON POST,我不知道為什么。 請幫忙。 我還添加了TransactionDateTime模型和JSON POST請求,該請求給了我錯誤。 我正在使用郵遞員發送請求。 提前致謝。 我的猜測是我的問題是serializers.DateTimeField,因為我使用以下代碼通過Django shell成功插入了數據

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

請參閱下面的序列化程序,成功的JSON,該JSON是通過生成錯誤的GET請求,混合,視圖,模型和POSt JSON請求返回的。

序列化器

class SimpleSerializer4(BulkSerializerMixin, ModelSerializer):

    user = serializers.SerializerMethodField()
    start_dt = serializers.DateTimeField(format='%Y-%m-%d %H:%M:%S', input_formats=['%Y-%m-%d %H:%M:%S'])   

    def get_user(self, obj):
        test_me = self.context.get('request')
        return test_me


    class Meta(object):
        model = TransactionDateTime
        list_serializer_class = BulkListSerializer
        fields = ('pk','start_dt', 'user')

通過GET請求成功的JSON數據

 [
  {
   "pk": 1,
   "start_dt": "2015-01-28 03:00:00",
   "user": "cdoe"
  },
  {
   "pk": 2,
   "start_dt": "2015-01-28 05:30:00",
   "user": "cdoe"
  }
 ]

視圖和混合

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}

TransactionDateTime模型

 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)

給我錯誤的JSON POST請求

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

  },
  {
    "start_dt": "2015-01-28 02:00:00"

  }

]

你可以試試這個

即嘗試不要在上下文中覆蓋請求鍵並返回整個上下文

DateTimeViewSet中

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() 
    context['user'] = var
    return context

SimpleSerializer4中

def get_user(self, obj): 
    test_me = self.context.get('user') 
    return test_me

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM