DRF возвращает 400 неверных запросов

#django #flutter #dart #django-models #django-rest-framework

#django #флаттер #dart #django-модели #django-rest-framework

Вопрос:

Я новичок в Django Rest Framework и пытаюсь отправить объект из приложения Flutter в серверную часть DRF.

У меня есть BatchGuideDraft , и я хочу отправить его в внутренний серверный POST метод, но я получаю 400 Bad Request сообщение об ошибке.

У меня либо 2 проблемы, первая из которых заключается в том, что я неправильно отображаю объект на стороне приложения; вторая — я не могу десериализовать его на серверной части. Я не смог найти причину проблемы, и мне нужна ваша помощь здесь.

Это моя BatchGuideDraft модель на стороне Флаттера:

 class BatchGuideDraft implements BaseRequestModel {
  final String description;
  final String frequencyTitle;
  final DateTime startDate;
  final DateTime endDate;
  final ReminderType reminderType;
  final List<DateTime> reminderDates;
  bool repeating;
  int batchID;

  BatchGuideDraft({@required this.frequencyTitle, @required this.description,
    @required this.startDate, @required this.endDate, @required this.reminderType,
    @required this.reminderDates, @required this.repeating});

  @override
  Map<String, dynamic> toMap() {
    assert(batchID != null);
    return <String, dynamic>{
      'description': description,
      'frequency_title': frequencyTitle,
      'start_date': startDate.toString(),
      'end_date': endDate.toString(),
      'reminder_type': reminderType.index.toString(),
      'reminder_dates': reminderDates.map((e) => e.toString()).toList().toString(),
      'batch': batchID.toString(),
      'repeating': repeating.toString(),
    };
  }
}
 

И вот как я пытаюсь это отправить:

 Future<void> createBatchGuide(BatchGuideDraft guide) async {
    await _post(["v1", "app", "guide"], guide.toMap());
}
 

Это мое BatchGuideDraftSerializer на стороне API:

 class BatchGuideRequestSerializer(serializers.ModelSerializer):
    done = serializers.BooleanField(default=False)
    reminder_dates = serializers.ListField(child=serializers.DateTimeField())

    class Meta:
        model = BatchGuide
        fields = ['id', 'description', 'done', 'frequency_title', 'start_date',
                  'end_date', 'reminder_type', 'reminder_dates', 'repeating']
 

И это моя BatchGuide модель:

 class BatchGuide(TimeStampMixin):
    done = models.BooleanField(default=False)
    description = models.TextField(max_length=1000)
    frequency_title = models.TextField(max_length=1000, null=True)
    start_date = models.DateTimeField(default=timezone.now)
    end_date = models.DateTimeField(null=True)
    reminder_type = models.PositiveIntegerField(default=0)
    reminder_dates = ArrayField(models.DateTimeField(), default=list)
    repeating = models.BooleanField(default=False)

    batch = models.ForeignKey(Batch, on_delete=models.CASCADE, related_name='guides')

    def __str__(self):
        return self.description

    class Meta:
        db_table = 'batch_guides'
        ordering = ['start_date']
 

Я застрял на этом, и я был бы очень рад, если бы вы могли мне помочь.

Спасибо и с уважением.

Комментарии:

1. вы проверили тело ответа 400?