I'm trying to return a HttpResponse from Django Rest Framework including data from 2 linked models. The models are:
class Wine(models.Model): color = models.CharField(max_length=100, blank=True) country = models.CharField(max_length=100, blank=True) region = models.CharField(max_length=100, blank=True) appellation = models.CharField(max_length=100, blank=True) class Bottle(models.Model): wine = models.ForeignKey(Wine, null=False) user = models.ForeignKey(User, null=False, related_name='bottles')
I'd like to have a serializer for the Bottle model which includes information from the related Wine.
I tried:
class BottleSerializer(serializers.HyperlinkedModelSerializer): wine = serializers.RelatedField(source='wine') class Meta: model = Bottle fields = ('url', 'wine.color', 'wine.country', 'user', 'date_rated', 'rating', 'comment', 'get_more')
which doesn't work.
Any ideas how I could do that?
Thanks :)
You just install it pip install drf-flex-fields , pass it through your serializer, add expandable_fields and bingo (example below). It also allows you to specify deep nested relationships by using dot notation. Then you add ? expand=teacher_set to your URL and it returns an expanded response.
SlugField in Django is like a CharField, where you can specify max_length attribute also. If max_length is not specified, Django will use a default length of 50. It also implies setting Field.
The HyperlinkedModelSerializer class is similar to the ModelSerializer class except that it uses hyperlinks to represent relationships, rather than primary keys. By default the serializer will include a url field instead of a primary key field.
Simple as that, adding the WineSerializer as a field solved it.
class BottleSerializer(serializers.HyperlinkedModelSerializer): wine = WineSerializer(source='wine') class Meta: model = Bottle fields = ('url', 'wine', 'user', 'date_rated', 'rating', 'comment', 'get_more')
with:
class WineSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Wine fields = ('id', 'url', 'color', 'country', 'region', 'appellation')
Thanks for the help @mariodev :)
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