Feature: Allow auto-creation for tags for pin / fix admin format

This commit is contained in:
winkidney
2019-02-21 12:37:19 +08:00
parent 33d9aeee48
commit e0a074fd9f
2 changed files with 18 additions and 5 deletions

View File

@@ -6,5 +6,5 @@ from .models import Pin
class PinAdmin(admin.ModelAdmin): class PinAdmin(admin.ModelAdmin):
pass pass
admin.site.register(Pin, PinAdmin)
admin.site.register(Pin, PinAdmin)

View File

@@ -57,11 +57,26 @@ class ImageSerializer(serializers.ModelSerializer):
return image return image
class TagSerializer(serializers.ModelSerializer): class TagSerializer(serializers.SlugRelatedField):
class Meta: class Meta:
model = Tag model = Tag
fields = ("name",) 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 PinSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
@@ -82,11 +97,9 @@ class PinSerializer(serializers.HyperlinkedModelSerializer):
"submitter": {"read_only": True}, "submitter": {"read_only": True},
} }
tags = serializers.SlugRelatedField( tags = TagSerializer(
many=True, many=True,
source="tag_list", source="tag_list",
queryset=Tag.objects.all(),
slug_field="name",
) )
image = ImageSerializer(required=False, read_only=True) image = ImageSerializer(required=False, read_only=True)
image_by_id = serializers.PrimaryKeyRelatedField( image_by_id = serializers.PrimaryKeyRelatedField(