Представление на основе моего класса выглядит следующим образом. «Получить» используется для перечисления всех бронирований, а «Опубликовать» — для создания нового бронирования.
class BookingList(APIView):
def get(self, request, format=None):
bookings = Booking.objects.all()
paginator = Paginator(bookings, 10)
page = paginator.page(1)
serializer = BookingSerializer(page.object_list, many=True)
return Response(serializer.data)
def post(self, request, format=None):
serializer = BookingSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
И мой класс Serializer выглядит так.
class BookingSerializer(serializers.HyperlinkedModelSerializer):
field1 = serializers.SerializerMethodField('get_alternate_var1')
field2 = serializers.SerializerMethodField('get_alternate_var2')
class Meta:
model = Booking
fields = ('field1', 'field2','var3','var4')
def get_alternate_field1(self, obj):
return obj.var1
def get_alternate_field2(self,obj):
return obj.var2
class Booking(models.Model):
var1 = models.CharField(max_length=200)
var2 = models.CharField(max_length=200)
var3 = models.CharField(max_length=200)
var4 = models.CharField(max_length=200)
....
Теперь это отлично работает с методом GET. Как создать новый объект с помощью POST? Моими параметрами сообщения являются field1, field2, var3, и я должен добавить значение по умолчанию (uuid) к var4 перед сохранением. Я не могу сопоставить field1, field2 с моделями var1 и var2. Как решить эту проблему?