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 related Destination
object into the serializer, instead of passing the pk
/id
of the Destination
object. So Django REST framework is seeing this and complaining, because it can't resolve LA
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With