首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个post_save信号在转换模型中引起污点问题

多个post_save信号在转换模型中引起污点问题
EN

Stack Overflow用户
提问于 2011-11-04 18:17:16
回答 1查看 877关注 0票数 1

我目前正在与django-nani一起工作,以便在一个项目上启用转换的模型。

这些模型中的许多都需要段塞来生成URL。我的客户是非技术的,让他们进入子弹是不合理的,无论是期望和支持费用。翻译是一个新的要求,所以我正在努力调整旧的翻译模式。

保存模型时,nani注册一个post_save信号以保存翻译。这很好,只不过现在如果我尝试注册一个post_save信号来使用所述的转换来生成弹状体,我就倒霉了;要么我的信号在后面运行,要么并发地运行,并且不存在翻译对象。

违规的示范代码:

代码语言:javascript
复制
from django.db import models
from django.db.models import signals
from django.template.defaultfilters import slugify

from tinymce.models import HTMLField
from nani.models import TranslatableModel, TranslatedFields

class Product(TranslatableModel):
    translations = TranslatedFields(
        name = models.CharField(max_length=100),
        title = models.CharField(max_length=100),
        description = HTMLField(),
    )

    slug = models.SlugField(max_length=100, blank=True, null=True, editable=False),

    # Various unrelated fields...

    def __unicode__(self):
        return self.translations.get(language_code='en').name

def product_post_save(sender, instance, created, **kwargs):
    new_slug = slugify(instance.translations.get(language_code='en').name)

    if instance.slug != new_slug:
        instance.slug = new_slug
        instance.save()
signals.post_save.connect(product_post_save, Product)

这将导致ProductTranslation匹配查询在第一行product_post_save上不存在 DoesNotExist异常。

我曾短暂地尝试过重构nani来覆盖保存方法,而不是使用post_save,但这似乎是一项重要的任务(至少对于那些对其内部结构知之甚少的人来说是如此,比如我)。

我看过一些第三方的autoslug字段,但我无法想象有谁会在这个特殊情况和翻译库中工作。

我的问题是..。

defined?

  • Barring
  • 是否有一种方法可以确保一个post_save排在任何其他的post_save之后,还有谁能为这个问题提出不同的/更好的解决方案呢?

编辑:发现了信号优先级的建议,并被Django核心开发人员击落。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-07 15:51:04

由于Django团队选择不支持对在钩子上注册的方法进行排序,并且nani实现了使用它们的转换保存,所以我没有找到明确的方法来确保我的代码运行在nani的post_save方法之后。

最后,我分叉了nani,并添加了一个自定义信号,当它的post_save完成时会触发。这并不理想(在我看来),但它有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8013973

复制
相关文章

相似问题

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