#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?