2011-11-04 49 views
0

我目前正在與django-nani合作以在項目上啓用已翻譯的模型。多個post_save信號導致翻譯後的模型產生slugify問題

許多車型需要URL生成蛞蝓。我的客戶是非技術性的,並且要求他們輸入slu would在預期和支持成本方面都是不合理的。翻譯是一項新的要求,因此我正在努力調整舊翻譯模型。

當保存一個模型,納尼寄存器用於保存翻譯爲目的的post_save信號。這很好,除了現在如果我嘗試註冊一個post_save信號來使用所述翻譯來生成slu,聲,我就不幸運了;無論是我的信號在運行之後還是併發運行,都沒有翻譯對象存在。

有問題的模型代碼:

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來重寫save方法,而不是使用post_save,但是這似乎是一項不重要的任務(至少對於對它的內部知識很少的人來說,像我一樣)。

我已經看了一些第三方autoslug領域,但我無法想象任何將與這種特定的情況和翻譯庫工作。

我的問題是...

  • 有沒有一種辦法,以確保一個post_save被定義的任何 他人後排隊?
  • 除非是,可別人提出一個 不同/更好的解決這個問題?

編輯:發現信號優先級已被Django核心開發者建議和擊倒。

回答

0

由於Django開發團隊已決定不支持排序上的鉤子和納尼實現翻譯節省使用它們註冊的方法,我發現沒有明確的方式,以確保我的代碼納尼的post_save方法後跑了。

在我分叉納尼並補充說的火災時,它的結束post_save自定義信號的結束。這是不理想的(在我看來),但它的作品。