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