I asked this question before but with less clarity
How to save the id
inside the RelatedFiled
of the ForeignKey
?
I am testing an application on django, I have two models:
class Album(models.Model):
album_id = models.IntegerField()
artist = models.CharField(max_length=260)
album_name = models.CharField(max_length=260)
class Song(models.Model):
album = models.ForeignKey(Album, related_name='song', blank=True, null=True) #foreign key
song_name = models.CharField(max_length=260)
with Song
containing a foreign key to Album
My question is how do I store automatically the pk
or id
of album
inside that foreign key ?
I have set up a detail_route
, and when I print album_id
I get the correct one that I am trying to access in the url
for example: album/101/song
will print album_id
as 101. But in my serializer it is not saving the RelatedField as 101. How do I fix this ?
@detail_route(methods=['post', 'get'], serializer_class=SongSerialiser)
def get_so(self, request, album_id=None):
serializer = self.get_serializer(data=request.data, context={"album_id": album_id })
if serializer.is_valid():
print album_id # this works !
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response({"detail": serializer.errors,
"status_code": status.HTTP_400_BAD_REQUEST})
Serializer:
class SongSerialiser(serializers.Serializer):
album = serializers.RelatedField(many=True)
song_name = serializers.CharField(required=False)
def create(self, validated_data):
album_id = self.context.get("album_id")
print album_id # I expect this to print 101 or the related id
instance = Song.objects.create(**validated_data)
instance.save()
return instance
Aucun commentaire:
Enregistrer un commentaire