2014-09-05 48 views
0

我無法找到一個好的答案或模型中的多個標籤的解決方案。我發現接近的唯一的事情是這樣的:覆蓋django-taggit標籤,使它們總是小寫

How can I limit django-taggit to accept only lowercase words?

這裏是我當前的代碼:

def clean_tags(self): 
    """ 
    Force all tags to lowercase. 
    """ 
    tags = self.cleaned_data.get('tags', None) 
    if tags: 
     tags = [t.lower() for t in tags] 

    return tags 

這真的取決於:

from taggit.managers import TaggableManager 
from taggit.models import TaggedItemBase 


class TaggedStory(TaggedItemBase): 
    content_object = models.ForeignKey("Story") 


class TaggedSEO(TaggedItemBase): 
    content_object = models.ForeignKey("Story") 


class Story(models.Model): 
    ... 

    tags = TaggableManager(through=TaggedStory, blank=True, related_name='story_tags') 

    ... 

    seo_tags = TaggableManager(through=TaggedSEO, blank=True, related_name='seo_tags') 

回答

1

我通常在形式層面實現這個關於你如何看待它。我對解決方案很滿意,因爲我認爲這是一個驗證問題。如果你認爲它是一個數據完整性問題,我可以理解你爲什麼想在模型層面上做到這一點。在這一點上,您最好的選擇是將taggit模塊繼承到可以重寫Tag.save()的點。

+0

良好的通話,我甚至沒有想到在表單上檢查它。我可能會嘗試這一點,但我無法將我的頭包裹在它的子類中。 – John 2014-09-05 16:35:55

+0

這應該被接受爲答案! – 2017-11-09 17:21:42