diff --git a/core/admin.py b/core/admin.py index 7d840a9..e7c76fe 100644 --- a/core/admin.py +++ b/core/admin.py @@ -6,5 +6,5 @@ from .models import Pin class PinAdmin(admin.ModelAdmin): pass -admin.site.register(Pin, PinAdmin) +admin.site.register(Pin, PinAdmin) diff --git a/core/drf_api.py b/core/drf_api.py index e30e4ae..6a08108 100644 --- a/core/drf_api.py +++ b/core/drf_api.py @@ -57,11 +57,26 @@ class ImageSerializer(serializers.ModelSerializer): return image -class TagSerializer(serializers.ModelSerializer): +class TagSerializer(serializers.SlugRelatedField): class Meta: model = Tag fields = ("name",) + queryset = Tag.objects.all() + + def __init__(self, **kwargs): + super(TagSerializer, self).__init__( + slug_field="name", + **kwargs + ) + + def to_internal_value(self, data): + obj, _ = self.get_queryset().get_or_create( + **{self.slug_field: data}, + defaults={self.slug_field: data, "slug": data} + ) + return obj + class PinSerializer(serializers.HyperlinkedModelSerializer): class Meta: @@ -82,11 +97,9 @@ class PinSerializer(serializers.HyperlinkedModelSerializer): "submitter": {"read_only": True}, } - tags = serializers.SlugRelatedField( + tags = TagSerializer( many=True, source="tag_list", - queryset=Tag.objects.all(), - slug_field="name", ) image = ImageSerializer(required=False, read_only=True) image_by_id = serializers.PrimaryKeyRelatedField(