Django 如何在rest_框架序列化程序中使用pre_save方法?

Django 如何在rest_框架序列化程序中使用pre_save方法?,django,django-rest-framework,Django,Django Rest Framework,我知道这是一个关于DRF的noob问题。我使用最新版本的Django和DRF。在Django中,我使用pre\u save信号在方法中创建slug。 def create_slug(instance, new_slug=None): slug = slugify(instance.title) if new_slug is not None: slug = new_slug qs = Article.objects.filter(slu

我知道这是一个关于
DRF
的noob问题。我使用最新版本的
Django
DRF
。在Django中,我使用
pre\u save信号在方法中创建slug。

    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)
然后,我可以设法使用DRF编写视图和序列化程序

from rest_framework import serializers
from yogavidya.apps.articles.models import Article

class ArticleSerializer(serializers.ModelSerializer):

  class Meta:
    model = Article
    fields = [
      "title",
      "user",
      "content",
      "excerpt",
    ]
--views.py--

当我发布表单时,我得到的
名称“create\u slug”未定义
。哪里是覆盖我的保存方法和更新的最佳位置?你能帮我吗


谢谢

我猜错误是由于
def create\u slug

Class Xyz:
    ...
    ...

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

它不是类函数,所以应该在类之外。

我猜错误是由于
def create\u slug的缩进错误造成的

Class Xyz:
    ...
    ...

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

它不是类函数,所以应该在类之外。

我想这就是缩进问题。您需要将
create\u slug
方法置于模型之外。@SumeetKumar
create_slug
在Django中使用时起作用,它不会在我的模型中造成问题。这是api中唯一的问题。我需要在哪里得到它?@SumeetKumar。。。是的,你是对的。我找到了
create\u slug
方法,它可以工作。你想写一个答案,我可以接受吗?作为答案发布。:)我想这就是缩进问题。您需要将
create\u slug
方法置于模型之外。@SumeetKumar
create_slug
在Django中使用时起作用,它不会在我的模型中造成问题。这是api中唯一的问题。我需要在哪里得到它?@SumeetKumar。。。是的,你是对的。我找到了
create\u slug
方法,它可以工作。你想写一个答案,我可以接受吗?作为答案发布。:)很乐意帮忙