2016-08-10 9 views
0

にprepared_field_nameからデータを追加します。 prepare_generic_data関数によって生成されます。準備機能がそれを返す前に、データがテンプレートに供給されているので、これは機能していないようです。ジャンゴ干し草は:</p> <pre><code>{{object.generic_data}} </code></pre> <p>今、私は私のgeneric_dataが発生することにしたい:私のテンプレートが言う、のように見える、私はインデックス化された文書を作成するためのテンプレートを使用していますインデックステンプレート

私は、この問題を回避するために準備関数や別の方法でテンプレートを使用する方法があるかどうかを知りたかったのです。

また、質問が十分明確でない場合は教えてください。 編集:

Search_index

import datetime 
from haystack import indexes 
from diskus.models import Recipe,Post 


class PostIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.EdgeNgramField(document=True, use_template=True) 
    post_id=indexes.IntegerField(model_attr='user_entity_id_id') 
    content_key=indexes.IntegerField(model_attr='content_key') 
    content_type=indexes.IntegerField(model_attr='content_type') 
    generic_data=indexes.CharField() 
    slug=indexes.CharField(model_attr='slug') 

    def get_model(self): 
     return Post 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

    def prepare_generic_data(self,obj): 
     if obj.content_type==3: 
      recipe=Recipe.objects.get(pk=obj.content_key) 
      return recipe.name 
     else: 
      return "random_stuff" 

モデル:

class Post(UserEntity): 
    user_entity_id = models.OneToOneField(UserEntity, 
           on_delete=models.CASCADE, 
           related_name='post', 
           primary_key=True, 
           db_column='id') 
    content_key = models.IntegerField() 
    content_type = models.IntegerField() 

class Recipe(models.Model): 
    id = models.AutoField(primary_key=True) 
    name = models.CharField(max_length=100) 
+1

あなたは」何を明確にすることができ再達成しようとしている?任意のコンテンツを生成できるテンプレートがある場合、なぜprepare関数も必要ですか? – solarissmoke

+0

prepare_generic_dataの@solarissmoke私は別のモデルからデータを取得しています(model.objects.get(pk = content_key)を使用しています)、content_keyはcontent_key = indexes.IntegerField(model_attr = 'content_key')として定義されています。 –

+0

質問を編集するコードですか?また、モデルとインデックスクラスも投稿してください。 – solarissmoke

答えて

0

割り出しテンプレートobjectの文脈においては、モデルインスタンスPostオブジェクト)ではないPostIndexオブジェクトです。したがってobjectにはgeneric_dataというプロパティがありません。テンプレート内から他のインデックスフィールドにアクセスすることはできません。

最も簡単な解決策はそうのようなPostモデルにgeneric_dataするためのロジックを移動することです。そして、あなたのテンプレート内の既存のコードは動作します

class Post(UserEntity): 

    def generic_data(self): 
     if self.content_type == 3: 
      # NOTE: you may need to ensure the Recipe is defined 
      # before Post in the models.py file, or you will get a name 
      # resolution error. 
      recipe = Recipe.objects.get(pk=self.content_key) 
      return recipe.name 
     else: 
      return "random_stuff" 

{{ object.generic_data }} 
関連する問題

 関連する問題