首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存django模型转换的已翻译插件不起作用

保存django模型转换的已翻译插件不起作用
EN

Stack Overflow用户
提问于 2019-01-24 21:45:25
回答 1查看 474关注 0票数 0

我已经为这件事折腾了一天了。

我使用django模型翻译来翻译类似博客的帖子。所有工作都很好,除了我还尝试根据本文自动转换标题中的插件:https://raphaelbeck.wordpress.com/2011/04/16/how-to-translate-slug-with-django-modeltranslation/

只有翻译后的辅助程序不会翻译保存到数据库中。

代码语言:javascript
运行
复制
class Item(models.Model):
    category = models.ForeignKey(
        'help.category',
        on_delete=models.PROTECT,
        related_name='categories')
    title = models.CharField(_('Titel'),max_length=255)
    description = RichTextField(_('Omschrijving'))
    slug = AutoSlugField(_('slug'), populate_from='title', overwrite=True)

    class Meta:
        verbose_name = _(u"Item") 
        verbose_name_plural = _(u"Items")

        #automatically creating slugs for translations
    def save(self, *args, **kwargs):
        for lang_code, lang_verbose in settings.LANGUAGES:
            if hasattr(self, 'slug_%s' % lang_code) and hasattr(self, 'title_%s' % lang_code):
                setattr(self, 'slug_%s' % lang_code, slugify(getattr(self, 'title_%s' % lang_code, u"")))
            print(self.slug_nl)
            print(self.slug_en)

        print(self.slug_nl)
        print(self.slug_en)
        super().save(*args, **kwargs)

    def __str__(self):
        return str(self.title)

我添加了一些打印函数来查看实际发生的情况。控制台日志与预期一致:

荷兰式弹头

荷兰式弹头

英语-slug

荷兰式弹头

英语-slug

根据控制台中的标题正确翻译了-> slug_en,但在数据库中保存了荷兰语段塞。

提前感谢!任何想法都是非常受欢迎的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-27 04:10:49

django模型转换和AutoSlugFieldsave()方法期间执行它们需要做的事情,因此您在保存之前所做的操作将在以后被覆盖。

除了在保存后添加翻译之外,没有其他方法,即使这意味着要保存模型两次。此外,您不能在post_save中调用save(),否则会造成无休止的递归。在查询集上使用update()。编写一个post_save信号处理程序:

代码语言:javascript
运行
复制
@receiver(post_save, sender=Item)
def add_slug_translations(instance, **kwargs):
    attrs = {}
    for lang_code, lang_verbose in settings.LANGUAGES:
        if hasattr(self, 'slug_%s' % lang_code) and hasattr(self, 'title_%s' % lang_code) and getattr(self, 'title_%s' % lang_code):
            attrs.update({'slug_%s' % lang_code: slugify(getattr(self, 'title_%s' % lang_code, u"")})
    if attrs:
        Item.objects.filter(id=instance.id).update(**attrs)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54348106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档