我目前正在與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核心開發者建議和擊倒。