Serializer.is_valid () возвращает False все время.Serializer.errors пусто - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь отправить некоторые изображения через POSTMAN в мой API.Тем не менее, все время я получаю 206 status, который возвращается, если serializer.is_valid() не True.Более того, serializer.errors пусто для каждого запроса.Он работал нормально, прежде чем я добавил поле изображения.Поля MEDIA_ROOT и MEDIA_URL уже созданы.

Хорошо работает на административной странице Django.

Я отправляю запрос, используя POSTMAN.Ответ, который я получаю:

{
    "data": {}
}

Заголовки:

Accept: application/json
Content-Type: application/json

Models.py

class Order(models.Model):
id = models.UUIDField(
    primary_key=True,
    db_index=True,
    editable=False,
    default=uuid4,
)
city = models.CharField(
    max_length=50,
    verbose_name = (u'City'),
    default="NY",
)
description=models.CharField(
    max_length=255,
    verbose_name=(u'desc'),
    default="Офигенная хата",
)
price = models.PositiveIntegerField(
    default=0,
    verbose_name=(u'Price')
)
requirements = models.CharField(
    max_length=50,
    verbose_name = (u'Req'),
    default="Clean"
)
address = models.CharField(
    max_length=50,
    verbose_name = (Address'),
    default="Wall st"
)
roommates_needed= models.PositiveIntegerField(
    verbose_name=(u''),
    default=None
)
images = models.FileField(
    upload_to = 'pic_folder/%Y/%m/%d/',
    default = 'pic_folder/None/no-img.jpg',
    verbose_name = (img'),
    blank = True,
)
gender_choices=(
    (1, u'Lady'),
    (2, u'Boy'),
    (3, u'anyone')
)
roommate_gender = models.PositiveIntegerField(
    choices=gender_choices,
    default=3,
    verbose_name=(u'gender '),)
status_choices = (
    (1, u'Active'),
    (2, u'Not active'),
    (3, u'Blocked'),
)
status = models.PositiveIntegerField(
    default=1,
    choices=status_choices,
    verbose_name=(u'Status'))
owner = models.OneToOneField(
    'User',
    on_delete=models.CASCADE,
    verbose_name=(u'Owner'),)
def __str__(self):
    return self.owner.name
class Meta:
    verbose_name = (order')
    verbose_name_plural = (u'3. Order list')

serializer.py

def post(self, request, format=None):
    serializer = OrderPostSerializer(data=request.data.copy(), partial=True)
    queryset = Order.objects.all()
    parser_classes = (MultiPartParser,)
    ## Проверяем совпадает ли токен передаваемый пользователем с тем что в настройках, авторизован он или нет.
    if not settings.DEBUG:
        token = request.META.get('HTTP_TOKEN', '')
        if token != settings.MAINMODULE_TOKEN:
            return Response({'detail': 'unauthorized'}, status=status.HTTP_401_UNAUTHORIZED)

    if serializer.is_valid() in request.data:
        serializer.save()
        perform_create()
        return Response({'data': serializer.data}, status=status.HTTP_201_CREATED)
    else:
        return Response({'data': serializer.errors}, status=status.HTTP_206_PARTIAL_CONTENT)

    def perform_create(self, serializer):
        serializer.save(content_object=self.request.user, image=self.request.FILES.get('images'))

1 Ответ

2 голосов
/ 18 апреля 2019

Нет, сериализатор не является недействительным. Этот тест:

if serializer.is_valid() in request.data:

проверяет, что Истина (или Ложь) есть в данных запроса, чего не будет. Удалить это in:

if serializer.is_valid():

(Также обратите внимание, что ваши переменные queryset и parser_classes не используются. Похоже, вы скопировали их из представления на основе классов, они вам не нужны в этом представлении функции.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...