2014-03-27 59 views
0

下午好,Django的草垛:準備索引數據有選擇

說我有一個models.py像這樣:

class my_stackoverflow_question(models.Model): 
    feedback_choices = (
     (GREAT, "Was a great question"), 
     (MEH, "Could've figured it out"), 
     (TERRIBLE, "I pity the foo"), 
    ) 

    feedback = models.IntegerField(default=GREAT, choices=feedback_choices) 

我search_indexes.py是這樣的:

class question_index(indexes.SearchIndex, indexes.Indexable): 
    text = ...stuff... 
    feedback = indexes.IntegerField(model_attr='feedback', faceted=True) 

當我顯示上述方面時,整數值將通過模板顯示

{% for feed in facets.fields.feedback %} 
    {{feed.0}} - {{feed.1}} 
{% endfor %} 

# Shows: 0-999 
#  1-1 
#  2-0 ;) 

我想要feed.0顯示實際的選擇值,如obj.get_feedback_display()會。所以,我想我會嘗試索引之前準備數據:

def prepare_feedback(self, obj): 
    return obj.feedback.get_feedback_display() #'AttributeError: 'long' object has no attribute 'get_feedback_display'' 

或 迴歸 「%s的」 %(obj.feedback.get_feedback_display())#Same錯誤如上

我會即使數據被索引爲整數,然後feed.0方面顯示名稱 - 但我相信方面字段直接來自索引而不是模型(這是否正確?)

如何可以我顯示facet的display_name而不是它的原始值?

謝謝!

回答

2

我想你是在正確的軌道上索引顯示文本,而不是整數選擇值。你需要告訴乾草堆它應該期望一個字符串,而不是一個很長的反饋,然後在my_stackoverflow_question對象本身而不是反饋字段上調用get_feedback_display()。

所以:

class question_index(indexes.SearchIndex, indexes.Indexable): 
    text = ...stuff... 
    feedback = indexes.CharField(model_attr='feedback', faceted=True) 

    def prepare_feedback(self, obj): 
     return obj.get_feedback_display() 
+0

天才!這完美的作品!謝謝 – ZAR