I know this is a noob question about DRF. I use latest version of Django
and DRF. In my Django , I create slugs in a method using pre_save signals.
def create_slug(instance, new_slug=None):
slug = slugify(instance.title)
if new_slug is not None:
slug = new_slug
qs = Article.objects.filter(slug=slug).order_by("-id")
exists = qs.exists()
if exists:
new_slug = "%s-%s" %(slug, qs.first().id)
return create_slug(instance, new_slug = new_slug)
return slug
@receiver(pre_save, sender = Article)def pre_save_article_receiver(sender,
instance, raw, using, **kwargs):
if not instance.slug:
instance.slug = create_slug(instance)
pre_save.connect(pre_save_article_receiver, sender=Article)
Then I can manage to write my views and serializers using DRF
from rest_framework import serializersfrom yogavidya.apps.articles.models
import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = [
"title",
"user",
"content",
"excerpt",
]
--views.py--
app_name = 'articles'class ArticleListView(generics.ListCreateAPIView):
lookup_field = 'pk'
serializer_class = ArticleSerializer
queryset = Article.objects.all()
def list(self, request):
# Note the use of `get_queryset()` instead of
`self.queryset`
queryset = self.get_queryset()
serializer = ArticleSerializer(queryset, many=True)
print(serializer.data)
return Response(serializer.data)
def get_queryset(self):
return Article.objects.all()
def get_object(self):
pk = self.kwargs.get("pk")
return Article.objects.get(pk=pk)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
class ArticleViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Article.objects.all().order_by('-title')
serializer_class = ArticleSerializer
When I post my form I get name 'create_slug' is not defined. Where is best
place to override my save method and updates? can you help me ?
Thanks
--
You received this message because you are subscribed to the Google Groups
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.