mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2026-01-01 23:47:04 -05:00
feat: Implement initial schema and add various API, service, and management command enhancements across the application.
This commit is contained in:
@@ -16,6 +16,7 @@ class Tag(SluggedModel):
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Post(SluggedModel):
|
||||
title = models.CharField(max_length=255)
|
||||
content = models.TextField(help_text="Markdown content supported")
|
||||
@@ -27,14 +28,10 @@ class Post(SluggedModel):
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name="blog_posts",
|
||||
help_text="Featured image"
|
||||
help_text="Featured image",
|
||||
)
|
||||
|
||||
author = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="blog_posts"
|
||||
)
|
||||
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="blog_posts")
|
||||
|
||||
published_at = models.DateTimeField(null=True, blank=True, db_index=True)
|
||||
is_published = models.BooleanField(default=False, db_index=True)
|
||||
|
||||
@@ -12,8 +12,10 @@ class TagSerializer(serializers.ModelSerializer):
|
||||
model = Tag
|
||||
fields = ["id", "name", "slug"]
|
||||
|
||||
|
||||
class PostListSerializer(serializers.ModelSerializer):
|
||||
"""Lighter serializer for lists"""
|
||||
|
||||
author = UserSerializer(read_only=True)
|
||||
tags = TagSerializer(many=True, read_only=True)
|
||||
image = CloudflareImageSerializer(read_only=True)
|
||||
@@ -31,16 +33,13 @@ class PostListSerializer(serializers.ModelSerializer):
|
||||
"tags",
|
||||
]
|
||||
|
||||
|
||||
class PostDetailSerializer(serializers.ModelSerializer):
|
||||
author = UserSerializer(read_only=True)
|
||||
tags = TagSerializer(many=True, read_only=True)
|
||||
image = CloudflareImageSerializer(read_only=True)
|
||||
image_id = serializers.PrimaryKeyRelatedField(
|
||||
queryset=CloudflareImage.objects.all(),
|
||||
source='image',
|
||||
write_only=True,
|
||||
required=False,
|
||||
allow_null=True
|
||||
queryset=CloudflareImage.objects.all(), source="image", write_only=True, required=False, allow_null=True
|
||||
)
|
||||
|
||||
class Meta:
|
||||
|
||||
@@ -14,13 +14,15 @@ class TagViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
permission_classes = [permissions.AllowAny]
|
||||
filter_backends = [filters.SearchFilter]
|
||||
search_fields = ["name"]
|
||||
pagination_class = None # Tags are usually few
|
||||
pagination_class = None # Tags are usually few
|
||||
|
||||
|
||||
class PostViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
Public API: Read Only (unless staff).
|
||||
Only published posts unless staff.
|
||||
"""
|
||||
|
||||
permission_classes = [IsStaffOrReadOnly]
|
||||
filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
|
||||
search_fields = ["title", "excerpt", "content"]
|
||||
|
||||
Reference in New Issue
Block a user