I my django-rest-framework I have the following models:
Basically every ride has one final destination and can have multiple middle destinations.
models.py:
class Destination(models.Model):
name=models.CharField(max_length=30)
class Ride(models.Model):
driver = models.ForeignKey('auth.User', related_name='rides_as_driver')
destination=models.ForeignKey(Destination, related_name='rides_as_final_destination')
leaving_time=models.TimeField()
num_of_spots=models.IntegerField()
passengers=models.ManyToManyField('auth.User', related_name="rides_as_passenger")
mid_destinations=models.ManyToManyField(Destination, related_name='rides_as_middle_destination')
serializers.py - RideSerializer
class RideSerializer(serializers.ModelSerializer):
driver = serializers.ReadOnlyField(source='driver.user.username')
class Meta:
model = Ride
fields = ('driver', 'destination', 'leaving_time',
'num_of_spots', 'passengers', 'mid_destinations')
read_only_fields = ('driver', 'passengers', 'mid_destinations')
Problem is - When I am trying to POST to /rides/ in order to add a ride - for example {destination=LA, leaving_time=19:45, num_of_spots=4}
I get error "destination":["Incorrect type. Expected pk value, received str."]}
couple of questions:
What is this error? if I have a destination as a foreign key in the Ride model, does it mean that the destination that I am adding has to be already in the Destinations table?
How to fix this error?
The issue is that you are passing the
name
of the relatedDestination
object into the serializer, instead of passing thepk
/id
of theDestination
object. So Django REST framework is seeing this and complaining, because it can't resolveLA
into an object.It sounds like you may actually be looking for a
SlugRelatedField
, which allows you to identify objects by a slug (LA
in this case) instead of their primary keys.