2016-12-05 10 views
0

Основываясь на следующем Serializer, Mixin и View, я могу успешно получить данные JSON через запрос GET (см. Ниже), но я получаю "AttributeError: 'NoneType' object has no attribute 'request'" при попытке выполните JSON POST через Django Restframework, и я не могу понять, почему. Пожалуйста помоги. Я также добавил модель TransactionDateTime и запрос POST JSON, который дает мне ошибку. Я использую Postman для отправки запроса. Заранее спасибо. Я думаю, что моя проблема с serializers.DateTimeField, потому что я успешно вставить данные через Джанго оболочку, используя нижеDjango RestFramework Error Associate с Serializer DateTimeField по запросу POST

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

Пожалуйста, смотрите ниже сериалайзер, успешный JSON, который был возвращен через GET запрос, Mixin, Вид, Модель и запрос POSt JSON, который генерирует ошибку.

Serializer

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') 

Успешные данные в формате JSON через GET запрос

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

Мнения и 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} 

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" 

    } 

] 

ответ

0

Вы можете попробовать это

Т.е. старайтесь не переопределить запрос keywork в контексте и вернуть весь контекст

В 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