为了账号安全,请及时绑定邮箱和手机立即绑定

如何重写管理 save_model 方法

如何重写管理 save_model 方法

至尊宝的传说 2023-08-15 18:52:16
我使用 slugify 为我的博客帖子 URL 创建 slugs。为了在 slug 中接受非英语字符(希腊语),我重写了 Post 模型的 save() 方法,其中包含一个参数allow_unicode=True。但是,这在管理区域中不起作用。每当我尝试通过设置带有希腊语标题的新帖子或编辑现有帖子的英文别名来在管理区域中设置希腊字符别名时,管理表单将不允许我保存。为此,正如我在其他线程中发现的那样,我应该重写 admin.py 文件中的 save_model() 方法。所以我这样做了,但出现错误。现在我收到的错误指出,管理区域请求的帖子的 slug 将随旧 url(基于 id 的 URL)而更改,而不是我在 urls.py 中设置的 slug-url。我收到的错误要么是AttribureError at /admin/blog/post/1(当我编辑现有帖子的标题时),要么是AttribureError at /admin/blog/post/add(当我添加新帖子时)。两种情况下的异常值为'WSGIRequest' object has no attribute 'save'我应该如何设置管理端保存方法来使用 slug url 请求 url?先感谢您!models.py:from django.db import modelsfrom django.utils import timezonefrom django.contrib.auth.models import Userfrom django.urls import reversefrom ckeditor.fields import RichTextFieldfrom django.utils.text import slugifyfrom taggit.managers import TaggableManagerclass Post(models.Model):    title = models.CharField(max_length=100)    content = RichTextField(blank=True, null=True)    date_posted = models.DateTimeField(default=timezone.now)    author = models.ForeignKey(User, on_delete=models.CASCADE)    is_published = models.BooleanField(default=True)    slug = models.SlugField(unique=True, max_length=100)    tags = TaggableManager(blank=True)    def __str__(self):        return self.title    def get_absolute_url(self):        return reverse('post-detail', kwargs={'slug': self.slug})    def save(self, *args, **kwargs):        if not self.slug:            self.slug = slugify(self.title, allow_unicode=True)        super(Post, self).save(*args, **kwargs)admin.py:from django.contrib import adminfrom .models import Postfrom django.utils.text import slugify)
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

当您调用super()方法时,不应将self其作为参数传递。因此,代替您当前的代码:

def save_model(self, request, obj, form, change):
    super(PostAdmin, self).save_model(self, request, obj, form)

您应该调用super()withoutself作为参数,并change在末尾添加缺失的内容:

def save_model(self, request, obj, form, change):
    super(PostAdmin, self).save_model(request, obj, form, change)


查看完整回答
反对 回复 2023-08-15
  • 1 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信